我正在尝试为字典中的键分配新值。但得到“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,我错过了什么?
答案 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.")
如果在你的程序中有意义,你还可以添加一些转义条件。