Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Lỗi Python typeerror: not all arguments converted during string formatting

Python rất khắt khe với quy tắc. Một tính năng chính ngôn ngữ Python giữ bạn trong kiểm soát để chương trình hoạt động như ý định. Bạn có thể gặp lỗi "not all arguments converted during string formatting" khi làm việc chuỗi.

Trong hướng dẫn này, nói về lỗi này và tại sao nó xuất hiện. Chúng ta đi qua hai tình huống phổ biến lỗi nêu lên giúp bạn giải quyết trong mã.

Không dài dòng, hãy bắt đầu!

Vấn đề: typeerror: not all arguments converted during string formatting

TypeError là loại lỗi báo chúng ta thực hiện tác vụ không thể thi hành trên giá trị kiểu dữ liệu nhất định. Trong trường hợp này, lỗi kiểu liên quan đến giá trị chuỗi.

Python cung cấp nhiều cách định dạng chuỗi. Cho phép chèn giá trị vào chuỗi hoặc nối giá trị cuối chuỗi.

Hai cách phổ biến định dạng chuỗi:

  • Dùng toán tử % (kiểu cũ)
  • Dùng toán tử {} với hàm .format()

Khi bạn cố dùng cả hai cú pháp cùng lúc, lỗi nêu lên.

Ví dụ: Trộn quy tắc định dạng chuỗi

Hãy viết chương trình tính tăng giá 5% sản phẩm bán tại tiệm bánh.

81% người tham gia cho biết họ cảm thấy tự tin hơn về cơ hội việc làm công nghệ sau khi tham gia bootcamp. Được ghép nối với bootcamp ngay hôm nay.

Sinh viên trung bình tốt nghiệp bootcamp mất chưa đến sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được việc đầu tiên.

Bắt đầu thu thập hai thông tin từ người dùng: tên sản phẩm và giá sản phẩm. Làm bằng câu lệnh input():

name = input("Enter the name of the product: ") price = input("Enter the price of the product: ")

Tiếp theo, tính giá mới sản phẩm nhân giá trị "price" với 1.05. Đại diện tăng 5%:

increase = round(float(price) * 1.05, 2)

Làm tròn "increase" hai chữ số thập phân dùng round(). Cuối cùng, dùng định dạng chuỗi in giá mới ra console:

print("The new price of {} is ${}. " % name, str(increase))

Mã thêm giá trị "name" và "increase" vào chuỗi. Chuyển "increase" thành chuỗi gộp vào chuỗi. Trước chuyển đổi, "increase" là số dấu chấm động. Chạy mã xem:

Traceback (most recent call last): File "main.py", line 6, in <module> print("The new price of {} is {}" % name, str(discount)) TypeError: not all arguments converted during string formatting

Có lỗi dòng cuối mã.

Vấn đề là trộn cú pháp định dạng chuỗi. Dùng {} và % operators. Dùng cho hai loại định dạng khác nhau.

Để khắc phục, thay dòng cuối bằng một trong hai dòng:

print("The new price of {} is ${}.".format(name, str(increase))) print("The new price of %s is $%s." % (name, str(increase)))

Dòng đầu dùng cú pháp .format(). Thay giá trị {} bằng giá trị trong .format() theo thứ tự chỉ định.

Dòng hai dùng kỹ thuật % định dạng chuỗi cũ. Giá trị "%s" thay bằng giá trị trong ngoặc sau toán tử %.

Hãy chạy mã lại:

Enter the name of the product: Babka Enter the price of the product: 2.50 The new price of Babka is $2.62.

Mã thành công thêm đối số vào chuỗi.

Ví dụ: Nhầm lẫn toán tử Modulo

Python dùng dấu phần trăm (%) tính số modulo và định dạng chuỗi. Số modulo là phần dư sau phép chia.

Nếu dùng % trên chuỗi, dùng định dạng; nếu dùng % trên số, tính modulo. Do đó, nếu giá trị định dạng chuỗi mà bạn muốn modulo, lỗi nêu lên.

Xem chương trình tính số lẻ hay chẵn:

number = input("Please enter a number: ") mod_calc = number % 2 if mod_calc == 0: print("This number is even.") else: print("This number is odd.")

Đầu tiên, yêu cầu người dùng nhập số. Sau đó dùng toán tử modulo tính phần dư khi "number" chia 2.

Nếu giá trị trả về modulo bằng 0, nội dung if chạy. Ngược lại, else chạy.

Hãy chạy mã:

Please enter a number: 7 Traceback (most recent call last): File "main.py", line 2, in <module> mod_calc = number % 2 TypeError: not all arguments converted during string formatting

TypeError khác. Lỗi nêu lên vì "number" là chuỗi. Phương thức input() trả về chuỗi. Cần chuyển "number" thành float hoặc integer nếu muốn modulo.

Chuyển "number" thành float dùng float():

mod_calc = float(number) % 2

Hãy thử chạy mã lại:

Please enter a number: 7 This number is odd.

Mã hoạt động!

Kết luận

Lỗi "not all arguments converted during string formatting" nêu lên khi Python không thêm tất cả đối số vào thao tác định dạng chuỗi. Xảy ra nếu trộn cú pháp định dạng chuỗi hoặc cố modulo trên chuỗi.

Bây giờ bạn đã sẵn sàng giải quyết lỗi Python phổ biến này như kỹ sư phần mềm chuyên nghiệp!