Lỗi “ValueError: zero length name in format” trong Python 3.0,3.1,3.2


120

Tôi đang cố gắng học Python (3 để cụ thể hơn) và tôi gặp lỗi này:

ValueError: zero length field name in format

Tôi truy cập vào Google và phát hiện ra rằng bạn cần chỉ định các số:

a, b = 0, 1
if a < b:
     print('a ({0}) is less than b ({1})'.format(a, b))
else:
     print('a ({0}) is not less than b ({1})'.format(a, b))

Và không giống như hướng dẫn (từ lynda.com) thực sự nói phải làm:

a, b = 0, 1
if a < b:
     print('a ({}) is less than b ({})'.format(a, b))
else:
     print('a ({}) is not less than b ({})'.format(a, b))

Hướng dẫn tôi sau đây có Python 3.1 và tôi đang sử dụng 3.2 và những gì tôi đọc được về lỗi này là điều này chỉ xảy ra trong <3.1 (3.0). Họ đã hoàn tác điều này trong 3.2 hay tôi đang làm gì đó sai?

Ngoài ra, hãy nói chậm;) đây thực sự là đêm đầu tiên của tôi học Python và chỉ là "tập lệnh" thứ hai mà tôi đã viết bằng Python.


1
Hãy thử thêm cái này: import sys; print (sys.version), chỉ để đảm bảo rằng bạn không vô tình gọi lên một số phiên bản python khác
Winston Ewert

Câu trả lời:


131

Tôi đoán rằng bạn đang tình cờ chạy python 2.6 bằng cách nào đó.

Tính năng này chỉ khả dụng cho ít nhất 3.1 nếu bạn đang sử dụng python 3 hoặc 2.7 nếu bạn đang sử dụng python 2.


3
Cảm ơn! Điều đó là vậy đó! Đã phải thay đổi shebangs của tôi thành: #! /usr/local/bin/python3sau khi xem xét tất cả. Có 3 vị trí cài đặt python khác nhau trên Mac -_- wtf.
Oscar Godson

4
Điều này đúng một phần: mã của OP sẽ hoạt động nếu nó là python 2.7, nhưng không phải 2.6. (Xem câu trả lời của @Dennis Williamson).
mayhewsw

Tôi gặp sự cố này với Python 3.0.1 trên Windows. (Nó chắc chắn nói 3.0.1 ở dòng đầu tiên sau khi bắt đầu cmdline Python)
nhập vào

@inger, bạn cần python 3.1 để sử dụng nó.
Winston Ewert

hmm, cảm ơn vì đã trả lời nhanh..however, các câu trả lời bên dưới cho biết "2.7 trở lên" - vậy 3.0.1 là sớm hơn? Ngoài ra, OP đã hỏi về vấn đề trong 3.0 (+ những người khác) - mà câu trả lời của bạn là "bạn đang chạy 2.6", điều này sẽ gợi ý rằng bản thân 3.0 là ổn. Sẽ rất tốt nếu bạn có thể cập nhật câu trả lời. Cảm ơn
inger

148

Python 2.6 và 3.0 yêu cầu số trường. Trong Python 2.7 trở lên và 3.1 trở lên, chúng có thể được bỏ qua.

Đã thay đổi trong phiên bản 2.7: Các chỉ định đối số vị trí có thể bị bỏ qua, vì vậy '{} {}' tương đương với '{0} {1}'.

python2.6.4>>> print '|{0:^12}|{1:^12}|'.format(3,4)
|     3      |     4     |

2
Sự khác biệt về phiên bản đã kích thích tôi ngày hôm nay! Cảm ơn vì con trỏ.
Richard Clayton

@Dennis: Tôi đã bỏ phiếu cho câu trả lời của bạn vì bạn đã chỉ ra cách giải quyết vấn đề trong các phiên bản python trước đó, bằng cách chỉ định số trường. Tuy nhiên, nói "Python 2.7 trở lên" có vẻ gây hiểu lầm cho tôi vì theo các câu trả lời khác ở đây, số trường được yêu cầu trong Python 3.0. Winston chỉ ra trong nhận xét cuối cùng về câu trả lời của anh ấy rằng 2.7 xuất hiện sau 3.0, vì vậy tuyên bố của bạn có thể đúng theo thứ tự thời gian, nhưng hầu hết chúng ta sẽ đọc nó vì chỉ ra rằng các dấu ngoặc nhọn hoạt động trong 3.0.
Tom Barron,

@TomBarron: Niềng răng trống phù hợp với tôi : python3.4 -c 'print("|{}|{}|".format(3,4))', nhưng dường như 3.0 không có nó (3.1 trở lên thì có). Tôi sẽ làm rõ câu trả lời của tôi.
Tạm dừng cho đến khi có thông báo mới.

2

Nếu đang sử dụng Eclipse, bạn nên xem Window -> Preferences -> PyDev -> Interpreter - Python. Ở đó, bạn có một danh sách các thông dịch viên (với tên và vị trí). Nếu đối với dự án hiện tại của bạn, bạn đang sử dụng trình thông dịch được đặt ví dụ như trong / usr / bin / python thì có thể thực thi / usr / bin / python -V sẽ cung cấp cho bạn một cái gì đó như "Python 2.6.6". Và có câu trả lời của bạn như Winston Ewert đã viết.

(bạn có thể thêm bộ chuyển đổi mới bằng cách chỉ cần nhấp vào nút "Mới ..." và đặt / usr / bin / python3 làm "vị trí". Sau đó, bạn có thể phải thay đổi cài đặt dự án của mình (Tùy chọn -> PyDev - Phiên dịch / Ngữ pháp).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.