字典赋值“int()的无效文字”错误

时间:2012-12-09 22:30:38

标签: python python-3.x

我正在尝试为字典中的键分配新值。但得到“ValueError:int()的无效文字与基数10:” 这就是我的工作。

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中平衡['beer'] = 5,我错过了什么?

2 个答案:

答案 0 :(得分: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')

或其他相似的东西

答案 1 :(得分:2)

再次阅读错误消息:

ValueError: invalid literal for int() with base 10

这意味着,您正在向函数int()传递一个无效参数,即一个不表示有效十进制数的字符串。

检查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.")

如果在你的程序中有意义,你还可以添加一些转义条件。