2012-06-21 9 views
90

Hier ist die Ausgabe. Dies sind utf-8-Strings Ich glaube, ... einige dieser NoneType sein kann, aber es nicht sofort, vor denen so ...Python TypeError: nicht genug Argumente für Formatzeichenfolge

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

Typeerror: nicht genügend Argumente für Formatstring

Seine 7 für 7 obwohl?

Antwort

117

Beachten Sie, dass die Syntax % zum Formatieren von Zeichenfolgen veraltet ist. Wenn Ihre Version von Python unterstützt, sollten Sie schreiben:

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

Dies auch den Fehler behebt, die Sie haben passiert.

+0

Dies scheint zu mischen '%' Formatierung und 'str.format() ', sollte dies nicht geschweifte Klammern in der Formatzeichenfolge verwenden? –

+0

@ F.J: Ja, du hast Recht - ich habe die Antwort aktualisiert :) –

+0

Funktioniert das auch für das Logging-Modul? Wird diese Art der Interpolation damit verstanden? – AllTradesJack

168

Sie müssen das Format Argumente in ein Tupel setzen (add Klammern):

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

Was Sie derzeit haben, ist gleichbedeutend mit dem folgenden:

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

Beispiel:

>>> "%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

Das hat ... funktioniert. Ich habe versucht,% s Formatierung zu verwenden, um den NoneType-Fehler zu vermeiden, aber ich bekomme es immer noch. Related: http://stackoverflow.com/questions/1338690/good-way-of-handling-nonetype-objects-when-printing-in-python – y2k

3

Ich habe den gleichen Fehler, wenn% als Prozentzeichen in meiner Formatzeichenfolge verwendet. Die Lösung dafür ist das %% zu verdoppeln.

+1

Einige Codebeispiele, wie Ihre Lösung funktioniert und wie sie fehlschlägt, usw. können hilfreich sein. Siehe [Wie schreibe ich eine gute Antwort?] (Https://stackoverflow.com/help/how-to-answer). Beachten Sie, dass dies eine 5 Jahre alte Frage ist. Sie sollten nur dann eine Antwort hinzufügen, wenn sie wesentlich mehr Informationen enthält als die bereits vorhandenen. – Ramon

Verwandte Themen