我正在尝试使用以下代码将 input() 数据转换为 int() :
prompt_text = "Enter a number: "
try:
user_num = int(input(prompt_text))
except ValueError:
print("Error")
for i in range(1,10):
print(i, " times ", user_num, " is ", i*user_num)
even = ((user_num % 2) == 0)
if even:
print(user_num, " is even")
else:
print(user_num, " is odd")
当我输入时出现以下奇怪的错误asd2例如:
Enter a number: asd2 Error
Traceback (most recent call last): File "chapter3_ex1.py", line 8, in <module>
print(i, " times ", user_num, " is ", i*user_num)
NameError: name 'user_num' is not defined
我究竟做错了什么?
您面临的问题是解释器在try
并执行except
堵塞。之后它将开始执行每一行。这将抛出NameError
您可以通过将程序的其余部分放入else
block.
prompt_text = "Enter a number: "
try:
user_num = int(input(prompt_text))
except ValueError:
print("Error")
else:
for i in range(1,10):
print(i, " times ", user_num, " is ", i*user_num)
even = ((user_num % 2) == 0)
if even:
print(user_num, " is even")
else:
print(user_num, " is odd")
引用自Python教程
try ... except 语句有一个可选的 else 子句,其中,当
存在,必须遵循所有例外条款。对于以下代码很有用
必须是如果 try 子句没有引发异常则执行.
另一种方法是使用sentinel value
prompt_text = "Enter a number: "
user_num = 0 # default value
try:
user_num = int(input(prompt_text))
except ValueError:
print("Error")
这也会起作用。然而结果可能并不如预期。
Protip - 使用 4 个空格缩进
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)