web-dev-qa-db-ja.com

Argv-文字列から整数へ

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

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

9

_sys.argv_は確かに文字列のリストです。文字列canが変換される場合は、int()関数を使用して文字列を数値に変換します。

あなたは割り当て結果をする必要があります、しかし:

_num1 = int(argv[1])
num2 = int(argv[2])
_

または単に使用します:

_num1, num2 = int(num1), int(num2)
_

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

17
Martijn Pieters

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

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
4

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

これを置き換えます:

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

これとともに:

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

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

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

1
J David Smith