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

Python TypeError:không đủ đối số cho chuỗi định dạng Giải pháp

Chuỗi Python phải được định dạng bằng số lượng đối số chính xác. Khi số lượng đối số bạn chỉ định ít hơn số lượng giá trị bạn muốn định dạng thành một chuỗi, bạn sẽ gặp phải lỗi như “TypeError:không đủ đối số cho chuỗi định dạng”.

Trong hướng dẫn này, chúng tôi nói về lỗi này có nghĩa là gì và tại sao nó lại xuất hiện. Chúng tôi xem qua một ví dụ để giúp bạn hiểu cách bạn có thể giải quyết lỗi này trong mã của mình.

TypeError:không đủ đối số cho chuỗi định dạng

Lỗi của chúng tôi là TypeError. Điều này có nghĩa là chúng tôi đã cố gắng thực hiện điều gì đó trên một giá trị có kiểu dữ liệu cơ bản không hỗ trợ hoạt động đó.

Trong trường hợp này, chúng tôi làm việc với định dạng chuỗi. Python cho chúng ta biết rằng chúng ta đã mắc lỗi khi định dạng một chuỗi.

Khi bạn định dạng một chuỗi, số đối số bạn chỉ định phải bằng số giá trị bạn muốn định dạng. Nếu không, bạn sẽ gặp lỗi.

Một tình huống mẫu

Một tình huống phổ biến xảy ra lỗi này là khi bạn quên đặt các đối số ở định dạng chuỗi% trong dấu ngoặc đơn. Cú pháp này sử dụng toán tử% để thêm các giá trị vào một chuỗi.

Ở đây, chúng tôi xây dựng một ứng dụng định dạng danh sách tên học sinh được vinh danh thành một chuỗi. Chúng ta bắt đầu bằng cách xác định danh sách tên học sinh:

students = ["Andy", "Malcolm", "Lindsay", "Lucy"]

Tiếp theo, chúng tôi định dạng các giá trị này thành một chuỗi bằng cú pháp%:

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ọ.

honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % students[0], students[1], students[2], students[3]
print(honor_roll)

Chúng tôi định dạng tất cả bốn tên từ mảng “sinh viên” của chúng tôi thành chuỗi “vinh_sĩ”. Chúng tôi sử dụng% s bên trong chuỗi của mình để chỉ ra nơi các giá trị nên được định dạng. % Được sử dụng sau chuỗi để chỉ định giá trị nào chúng ta muốn thêm vào chuỗi của mình.

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 3, in <module>
	honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % students[0], students[1], students[2], students[3]
TypeError: not enough arguments for format string

Python đã gặp lỗi. Hãy xem chúng tôi có thể giải quyết nó như thế nào.

Giải pháp # 1:Sửa cú pháp định dạng chuỗi

Chúng tôi đã mắc lỗi trong cách chúng tôi định dạng chuỗi. Khi sử dụng toán tử%, các giá trị bạn muốn thêm vào một chuỗi phải được đặt trong dấu ngoặc đơn.

Trong ví dụ trên, chúng tôi chỉ định các giá trị để thêm vào bên trong chuỗi của chúng tôi dưới dạng danh sách các giá trị được phân tách bằng dấu phẩy. Danh sách này không xuất hiện trong ngoặc đơn.

Chúng tôi sửa lỗi của mình bằng cách đặt các giá trị sau dấu ngoặc đơn% đăng nhập:

honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % (students[0], students[1], students[2], students[3])

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

Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.

Mã của chúng tôi trả về thành công một tin nhắn thông báo cho chúng tôi về những học sinh được vinh danh.

Giải pháp # 2:Sử dụng .format ()

Cú pháp% đang bắt đầu trở nên lỗi thời. Có các phương pháp định dạng chuỗi khác như phương thức .format () được ưa chuộng hơn trong mã Python hiện đại.

Để giải quyết vấn đề của chúng tôi, chúng tôi có thể sử dụng .format() cú pháp thay vì cú pháp%:

honor_roll = "{}, {}, {}, and {} are on the CK High School Honor Roll.".format(students[0], students[1], students[2], students[3])

Cấu trúc của cú pháp này tương tự như cấu trúc của phương thức%. Trong chuỗi của chúng tôi, chúng tôi sử dụng dấu ngoặc vuông {} để chỉ ra nơi chúng tôi muốn thêm giá trị.

Chúng tôi sử dụng .format() để chỉ định danh sách các giá trị mà chúng ta muốn thêm vào chuỗi của mình. Hãy chạy mã của chúng tôi:

Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.

Chương trình của chúng tôi đã hiển thị thành công cho chúng tôi danh sách tên của các học sinh được vinh danh. Danh sách này được định dạng là một phần của chuỗi.

Kết luận

Lỗi “TypeError:không đủ đối số cho chuỗi định dạng” xuất hiện khi số lượng đối số được chỉ định trong thao tác định dạng chuỗi không bằng số giá trị bạn muốn thêm vào chuỗi.

Để giải quyết vấn đề này, trước tiên hãy đảm bảo bạn đặt tất cả các đối số trong dấu ngoặc nhọn () nếu bạn đang sử dụng toán tử%. Bạn có thể sử dụng .format() thay thế cho cú pháp% nếu bạn muốn sửa lỗi này và hiện đại hóa mã của mình.

Bây giờ bạn đã sẵn sàng để sửa lỗi Python phổ biến này như một chuyên gia!