这是我的第一篇文章,所以如果我没有正确地做到这一点,请告诉我!另外,请不要为我的代码太过刻苦,我(非常)新!
我正在尝试创建一个基本的“计算器”,它将两个数字作为输入并将总和反馈给用户。如果用户键入'quit',我希望程序中断,如果他们输入字符串而不是整数,我希望程序响应,告诉他们输入一个数字。我还希望程序在添加数字后继续,以便用户可以继续添加数字,直到他们选择键入“退出”。
我的问题是:
程序运行,并询问用户第一个和第二个数字,但是,如果用户键入字符串,则STILL会产生回溯错误。我假设我没有以某种方式正确输入异常。此外,循环永远不会结束,因此它返回输入的两个数字的常量字符串。
number1 = int(input("Enter a number: "))
number2 = int(input("Enter another number: "))
error_msg = print("That isn't a number. Please enter a number")
flag = True
while flag == True:
try:
print(number1)
except ValueError:
print(error_msg)
try:
print(number2)
except ValueError:
print(error_msg)
summation = number1 + number2
print(summation)
if number1 or number2 == 'quit':
flag == False
这是我的错误消息:
Enter a number: 3
Enter another number: f
Traceback (most recent call last):
File "errors.py", line 2, in <module>
number2 = int(input("Enter another number: "))
ValueError: invalid literal for int() with base 10: 'f'
编辑 - 错误消息,谢谢你,larsks。
非常感谢任何帮助!
答案 0 :(得分:1)
你在那里要求输入:
number1 = int(input("Enter a number: "))
number2 = int(input("Enter another number: "))
然后,您同时使用int(...)
将用户输入转换为整数。如果键入非整数值,则会出现异常:
Traceback (most recent call last):
File "calc.py", line 1, in <module>
number1 = int(input("Enter a number: "))
ValueError: invalid literal for int() with base 10: 'hello'
这些行周围没有try
/ except
块,因此回溯会导致程序退出。
您的代码后面会有一些try
/ except
个阻止,但他们什么都不做:
try:
print(number1)
except ValueError:
print(error_msg)
print(number1)
永远不会引发ValueError
例外(因为print
并不关心你是否给它一个数字或字符串或其他东西)。
答案 1 :(得分:1)
你几乎得到了它,但你的输入是在错误的地方,这里是一个更加pythonic的方法。
import sys
flag = True
while flag:
number1 = input("Enter a number: ")
if number1 == 'quit':
sys.exit(1)
number2 = input("Enter another number: ")
if number2 == 'quit':
sys.exit(1)
try:
number1 = int(number1)
number2 = int(number2)
except (ValueError, AttributeError):
print("That isn't a number. Please enter a number")
else:
summation = number1 + number2
print(summation)