私はpythonでかなり新しく、argvで遊んでいます。この簡単なプログラムをここに書いたところ、次のようなエラーが発生しました。
TypeError:%d形式: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を実行すると、argvは2 2を文字列に入れますか?もしそうなら、どうすればこれらを整数に変換できますか?
ご協力いただきありがとうございます。
_sys.argv
_は確かに文字列のリストです。文字列canが変換される場合は、int()
関数を使用して文字列を数値に変換します。
あなたは割り当て結果をする必要があります、しかし:
_num1 = int(argv[1])
num2 = int(argv[2])
_
または単に使用します:
_num1, num2 = int(num1), int(num2)
_
int()
を呼び出しましたが、戻り値を無視しました。
変換された整数をこれらの変数に割り当てます。
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
int(argv[1])
を実行しても、実際にはargv[1]
(または割り当てられているnum1
)の値は変更されません。
これを置き換えます:
int(argv[1])
int(argv[2])
これとともに:
num1 = int(num1)
num2 = int(num2)
そしてそれはうまくいくはずです。
Int(..)、str(...)などの関数は、渡された値を変更しません。代わりに、returnデータを別のタイプとして再解釈します。