2012-06-21 40 views
90

Đây là đầu ra. Đây là những chuỗi utf-8 Tôi tin rằng ... một số trong những có thể NoneType nhưng nó không thành công ngay lập tức, trước khi những người như thế ...Loại PythonError: không đủ đối số cho chuỗi định dạng

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname, procversion, int(percent), exe, description, company, procurl 

Lỗi Loại: không đủ lý lẽ cho chuỗi định dạng

7 của nó cho 7 mặc dù?

Trả lời

117

Lưu ý rằng cú pháp % cho chuỗi định dạng trở nên lỗi thời. Nếu phiên bản Python của bạn hỗ trợ, bạn nên viết:

instr = "'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}'".format(softname, procversion, int(percent), exe, description, company, procurl) 

Điều này cũng khắc phục lỗi mà bạn đã gặp phải.

+0

Điều này có vẻ là trộn '%' định dạng và 'str.format() ', không nên sử dụng dấu ngoặc nhọn trong chuỗi định dạng? –

+0

@ F.J: Có, bạn nói đúng - Tôi đã cập nhật câu trả lời :) –

+0

Tính năng này có hoạt động đối với mô-đun ghi nhật ký không? Loại nội suy này có được hiểu không? – AllTradesJack

168

Bạn cần phải đặt các đối số định dạng thành một tuple (thêm dấu ngoặc đơn):

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % (softname, procversion, int(percent), exe, description, company, procurl) 

gì bạn đang có tương đương như sau:

intstr = ("'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname), procversion, int(percent), exe, description, company, procurl 

Ví dụ:

>>> "%s %s" % 'hello', 'world' 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: not enough arguments for format string 
>>> "%s %s" % ('hello', 'world') 
'hello world' 
+2

Đó là cách làm việc. Tôi đã cố gắng sử dụng định dạng% s để tránh lỗi NoneType, nhưng tôi vẫn nhận được nó. Related: http://stackoverflow.com/questions/1338690/good-way-of-handling-nonetype-objects-when-printing-in-python – y2k

3

Tôi gặp lỗi tương tự khi sử dụng% làm ký tự phần trăm trong chuỗi định dạng của mình. Giải pháp cho điều này là tăng gấp đôi lên %%.

+1

Cung cấp một số ví dụ về cách hoạt động của giải pháp của bạn và cách giải pháp không hoạt động mà không có nó, v.v. có thể hữu ích. Xem [Làm cách nào để viết câu trả lời hay?] (Https://stackoverflow.com/help/how-to-answer). Lưu ý rằng đây là câu hỏi 5 năm tuổi, vì vậy bạn chỉ nên thêm câu trả lời nếu nó cung cấp nhiều thông tin hơn đáng kể so với những câu hỏi đã có. – Ramon

Các vấn đề liên quan