Computer >> Máy Tính >  >> Lập trình >> Python

Lỗi gõ Python:không phải tất cả các đối số được chuyển đổi trong quá trình định dạng chuỗi

Python là một công cụ hỗ trợ cho các quy tắc. Một trong những tính năng chính của ngôn ngữ Python giúp bạn kiểm tra để các chương trình của bạn hoạt động theo cách bạn dự định. Bạn có thể gặp lỗi cho biết “không phải tất cả các đối số đều được chuyển đổi trong quá trình định dạng chuỗi” khi bạn đang làm việc với chuỗi.

Trong hướng dẫn này, chúng tôi nói về lỗi này và lý do tại sao nó bật lên. Chúng tôi đi qua hai trường hợp phổ biến trong đó lỗi này được đưa ra để giúp bạn giải quyết nó trong mã của mình.

Không cần phải quảng cáo thêm, hãy bắt đầu!

Sự cố:typeerror:không phải tất cả các đối số đều được chuyển đổi trong quá trình định dạng chuỗi

Lỗi TypeError là một loại lỗi cho chúng ta biết rằng chúng ta đang thực hiện một tác vụ không thể thực hiện được trên một giá trị của một loại nhất định. Trong trường hợp này, lỗi kiểu của chúng tôi liên quan đến một giá trị chuỗi.

Python cung cấp một số cách để bạn có thể định dạng chuỗi. Điều này cho phép bạn chèn giá trị vào chuỗi hoặc nối các giá trị vào cuối chuỗi.

Hai trong số những cách phổ biến nhất để định dạng chuỗi là:

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

Khi bạn cố gắng sử dụng cả hai cú pháp này cùng nhau, một lỗi sẽ xuất hiện.

Ví dụ:Kết hợp các quy tắc định dạng chuỗi

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

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

Chúng tôi bắt đầu bằng cách thu thập hai thông tin từ người dùng:tên của sản phẩm và giá của sản phẩm. Chúng tôi thực hiện việc này 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, chúng tôi tính giá mới của sản phẩm bằng cách nhân giá trị của "price" với 1,05. Điều này thể hiện mức tăng giá 5%:

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

Chúng tôi làm tròn giá trị của "tăng" thành hai chữ số thập phân bằng cách sử dụng câu lệnh round (). Cuối cùng, sử dụng định dạng chuỗi để in giá mới của sản phẩm ra bảng điều khiển:

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

Mã này thêm các giá trị của "tên" và "tăng" vào chuỗi của chúng tôi. Chúng tôi chuyển đổi "tăng" thành một chuỗi để hợp nhất nó thành chuỗi của chúng tôi. Trước khi chúng tôi chuyển đổi giá trị, "tăng" là một số dấu phẩy động. Chạy mã của chúng tôi và xem điều gì sẽ xảy ra:

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ó vẻ như có lỗi trên dòng cuối cùng của mã của chúng tôi.

Vấn đề là chúng tôi đã trộn lẫn cú pháp định dạng chuỗi của mình. Chúng tôi đã sử dụng toán tử {} và%. Chúng được sử dụng cho hai kiểu định dạng chuỗi khác nhau.

Để giải quyết vấn đề này, chúng tôi thay thế dòng cuối cùng của chương trình bằng một trong hai dòng mã sau:

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

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

Dòng đầu tiên của mã sử dụng .format() cú pháp. Điều này thay thế các giá trị của {} bằng các giá trị trong .format() tuyên bố theo thứ tự chúng được chỉ định.

Dòng mã thứ hai sử dụng kỹ thuật định dạng chuỗi% kiểu cũ. Các giá trị “% s” được thay thế bằng các giá trị được đặt trong ngoặc đơn sau toán tử%.

Hãy chạy lại mã của chúng tôi và xem điều gì sẽ xảy ra:

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

Mã của chúng tôi đã thêm thành công các đối số vào chuỗi của chúng tôi.

Ví dụ:Khó hiểu với Nhà điều hành Modulo

Python sử dụng dấu phần trăm (%) để tính toán số modulo và định dạng chuỗi. Số modulo là phần dư còn lại sau một phép chia tổng.

Nếu bạn sử dụng dấu phần trăm trên một chuỗi, nó được sử dụng để định dạng; nếu bạn sử dụng dấu phần trăm trên một số, nó được sử dụng để tính toán môđun. Do đó, nếu một giá trị được định dạng là một chuỗi mà bạn muốn thực hiện phép tính modulo, thì sẽ xảy ra lỗi.

Hãy xem một chương trình tính toán xem một số là số lẻ hay số 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, chúng tôi yêu cầu người dùng nhập một số. Sau đó, chúng tôi sử dụng toán tử modulo để tính phần còn lại được trả về khi “số” chia cho 2.

Nếu giá trị trả về của toán tử modulo bằng 0, thì nội dung của if của chúng tôi thực thi câu lệnh. Nếu không, nội dung của else câu lệnh chạy.

Hãy chạy mã của chúng tôi:

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

Lỗi Loại khác. Lỗi này xuất hiện vì “number” là một chuỗi. input() phương thức trả về một chuỗi. Chúng ta cần chuyển đổi "số" thành dấu phẩy động hoặc số nguyên nếu chúng ta muốn thực hiện một phép tính modulo.

Chúng ta có thể chuyển đổi “number” thành float bằng cách sử dụng hàm float ():

mod_calc = float(number) % 2

Hãy thử chạy lại mã của chúng tôi:

Please enter a number: 7
This number is odd.

Mã của chúng tôi hoạt động!

Kết luận

Lỗi “không phải tất cả các đối số được chuyển đổi trong quá trình định dạng chuỗi” xuất hiện khi Python không thêm tất cả các đối số vào một thao tác định dạng chuỗi. Điều này xảy ra nếu bạn kết hợp cú pháp định dạng chuỗi của mình hoặc nếu bạn cố gắng thực hiện thao tác modulo trên một chuỗi.

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