2013-06-29 23 views
6

私はPythonでかなり新しいです。私はargvで遊んでいます。 ARGVは、文字列に2 2を入れない、Argv - String into 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) 

私はfilename.py 2 2を実行します。私はここと言うエラーを取得、この簡単なプログラムを書きましたの?もしそうなら、どうすればこれらを整数に変換できますか?

ありがとうございました。

答えて

9

sys.argvは実際には文字列のリストです。文字列に変換できる場合は、int()関数を使用して文字列を数値に変換します。

あなたが に必要

に結果を割り当て、しかし:

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

または単に使用します。

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

あなたはコールint()をしましたが、戻り値を無視します。

4

それらの変数に変換された整数を割り当てます。

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

だけで行う:

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

intが新しいintオブジェクトを返すように、元の項目には影響しません、sys.argv内の項目ではありませんそれによって影響を受ける。

ヨは、あなたがこれを行うことができ、元のリストを変更します。

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])が実際に(それが割り当てられているかnum1の、)argv[1]の値を変更しません実行しています。これにより

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

はこの置き換え

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

をし、それが動作するはずです。

int(..)、str(...)などの関数は、渡された値を変更しません。代わりに、彼らはを返す異なるタイプとしてデータの再解釈。

関連する問題