-1

辞書のキーに新しい値を割り当てようとしています。しかし、「ValueError: 基数 10 の int() のリテラルが無効です:」というメッセージが表示されます。

balance = {'beer':5, 'toast':2}
item = input("what did you eat?: ")
price = input("how much?: ")
if item not in balance:
   balance[item] = int(price)
else:
   balance[item] = balance[item] + int(price)

python shell で balance['beer'] = 5 を実行できるので、私は困惑しています。何が欠けていますか?

4

2 に答える 2

2

の値は何ですかprice

それはおそらく文字列ですか?

に変換できない値を持つintと、これが発生します

>>> test = 'test'
>>> int(test)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'test'

また、エラー文字列だけでなく、Python が質問でそれを提供するので、必ず完全なトレースバックを投稿してください。

プログラムに整数が必要であることがわかるので、これはデータ検証について学ぶ絶好の機会です。これを自分で処理して、独自のメッセージをユーザーに表示するか、プログラムにエラーを許可することができます (プログラムのクライアントがエラーを理解すると仮定します)。

データ検証への近道はありません

try:
  price = int(input("how much?: "))
catch ValueError:
  print('Please enter an integer')

またはその趣旨の何か

于 2012-12-09T22:32:36.797 に答える
2

エラー メッセージをもう一度読みます。

ValueError: invalid literal for int() with base 10

これは、無効な引数を function に渡していることを意味しますint()。つまり、有効な 10 進数を表していない文字列です。

price保持している名前を確認します。ユーザーから取得されるため、プログラムは、ガベージである場合の状況を処理できるように準備する必要があります。私は通常、定型文を処理する関数を作成します。

def input_int(prompt):
    while True:
        data = input(prompt)
        try:
            return int(data)
        except ValueError:
            print("That's not a valid number. Try again.")

プログラムで意味がある場合は、エスケープ条件を追加することもできます。

于 2012-12-09T22:33:37.517 に答える