Chuỗi Python phải định dạng dùng đúng số lượng đối số. Khi số đối số chỉ định ít hơn giá trị muốn định dạng vào chuỗi, gặp lỗi "TypeError: not enough arguments for format string".
Trong hướng dẫn này, nói về ý nghĩa lỗi và tại sao nêu lên. Chúng ta đi qua ví dụ giúp hiểu cách khắc phục trong mã.
TypeError: not enough arguments for format string
Lỗi là TypeError. Nghĩa là cố làm tác vụ trên giá trị kiểu dữ liệu không hỗ trợ tác vụ đó.
Trường hợp này, làm việc định dạng chuỗi. Python báo lỗi định dạng chuỗi.
Khi định dạng chuỗi, số đối số chỉ định phải bằng số giá trị muốn định dạng. Ngược lại, gặp lỗi.
Tình huống ví dụ
Tình huống phổ biến lỗi nêu lên là quên bao đối số % format trong ngoặc đơn. Cú pháp này dùng % thêm giá trị vào chuỗi.
Ở đây, xây app định dạng list tên học sinh honor roll thành chuỗi. Bắt đầu định nghĩa list tên:
students = ["Andy", "Malcolm", "Lindsay", "Lucy"]
Tiếp theo, định dạng giá trị chuỗi dùng %:
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.
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)
Định dạng bốn tên từ "students" vào "honor_roll". Dùng %s trong chuỗi chỉ vị trí định dạng. % sau chuỗi chỉ giá trị muốn thêm.
Chạy mã xem:
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 khắc phục.
Giải pháp #1: Sửa cú pháp định dạng chuỗi
Chúng ta sai cách định dạng chuỗi. Dùng % operator, giá trị thêm vào chuỗi phải trong ngoặc đơn.
Ví dụ trên, chỉ định giá trị thêm như danh sách giá trị phân cách dấu phẩy. Danh sách không xuất hiện ngoặc đơn.
Khắc phục bằng bao giá trị sau % trong ngoặc đơn:
honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % (students[0], students[1], students[2], students[3])
Chạy mã:
Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.
Mã trả về thành công thông báo học sinh honor roll.
Giải pháp #2: Dùng .format()
Cú pháp % bắt đầu lỗi thời. Có phương pháp định dạng chuỗi khác như .format() ưa chuộng hơn trong Python hiện đại.
Để khắc phục, dùng .format() thay %:
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ú pháp tương tự %. Trong chuỗi, dùng {} ngoặc nhọn chỉ vị trí thêm giá trị.
Dùng .format() chỉ danh sách giá trị muốn thêm chuỗi. Chạy mã:
Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.
Chương trình thành công hiển thị danh sách tên học sinh honor roll. Danh sách định dạng như một phần chuỗi.
Kết luận
Lỗi "TypeError: not enough arguments for format string" nêu lên khi số đối số chỉ định thao tác định dạng chuỗi không bằng số giá trị muốn thêm chuỗi.
Khắc phục bằng trước đảm bảo bao tất cả đối số trong ngoặc đơn () nếu dùng % operator. Bạn dùng .format() thay % nếu muốn khắc phục lỗi và hiện đại hóa mã.
Bây giờ bạn đã sẵn sàng khắc phục lỗi Python phổ biến này như chuyên gia!