13

私はPythonが初めてで、argvで遊んでいます。ここにこの簡単なプログラムを書き、次のようなエラーが発生しました。

TypeError: %d 形式: 文字列ではなく数値が必要です

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 を文字列に入れますか? もしそうなら、どうすればこれらを整数に変換できますか?

ご協力いただきありがとうございます。

4

3 に答える 3

26

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

ただし、結果を割り当てる必要があります。

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

または単に使用します:

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

呼び出しint()ましたが、戻り値を無視しました。

于 2013-06-29T18:33:53.083 に答える
5

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

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
于 2013-06-29T18:33:57.677 に答える
1

実行int(argv[1])しても、実際には の値argv[1](またはnum1割り当てられている の値) は変更されません。

これを置き換えます:

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

これとともに:

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

そしてそれはうまくいくはずです。

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

于 2013-06-29T18:36:22.260 に答える