2013-06-29 22 views
6

Ich bin ziemlich neu bei Python und ich habe mit argv gespielt. Ich schrieb dieses einfache Programm hier und erhalte eine Fehlermeldung, die besagt:Argv - String in Integer

TypeError: %d format: a number is required, not str

from sys import argv 

file_name, num1, num2 = argv 
int(argv[1]) 
int(argv[2]) 
def addfunc(num1, num2): 
    print "This function adds %d and %d" % (num1, num2) 
    return num1 + num2 

addsum = addfunc(num1, num2) 
print "The final sum of addfunc is: " + str(addsum) 

Wenn ich filename.py 2 2 laufen, tut argv 2 2 in Strings setzen? Wenn ja, wie konvertiere ich diese in ganze Zahlen?

Danke für Ihre Hilfe.

Antwort

9

sys.argv ist in der Tat eine Liste von Zeichenfolgen. Verwenden Sie die Funktion int(), um eine Zeichenfolge in eine Zahl umzuwandeln, vorausgesetzt, die Zeichenfolge kann konvertiert werden.

Sie müssen assign das Ergebnis jedoch:

num1 = int(argv[1]) 
num2 = int(argv[2]) 

oder einfach verwenden:

num1, num2 = int(num1), int(num2) 

Sie haben int() nennen, aber der Rückgabewert ignoriert.

4

Ordnen Sie die konvertierten ganzen Zahlen zu dieser Variablen:

num1 = int(argv[1]) #assign the return int to num1 
num2 = int(argv[2]) 

Doing gerade:

int(argv[1]) 
int(argv[2]) 

werden nicht die ursprünglichen Elemente beeinflussen als int ein neues int Objekt zurückgibt, sind die Elemente in sys.argv nicht davon betroffen.

Yo die ursprüngliche Liste ändern Sie dies tun können:

argv[1:] = [int(x) for x in argv[1:]] 
file_name, num1, num2 = argv #now num1 and num2 are going to be integers 
1

int(argv[1]) Rennen nicht wirklich den Wert von argv[1] ändern (oder von num1, zu dem sie zugeordnet ist).

diese ersetzen:

int(argv[1]) 
int(argv[2]) 

mit diesem:

num1 = int(num1) 
num2 = int(num2) 

und es sollte funktionieren.

Die Funktionen int (..), str (...) usw. ändern die an sie übergebenen Werte nicht. Stattdessen geben sie eine Neuinterpretation der Daten als einen anderen Typ zurück.