[英]python name not defined even though it is
我知道这是基本知识,但实际上我什至不知道自己做错了什么。
while True:
try:
end=int(input("If You Dont Want To Buy Anything Press 1 To Exit\nOr If You Would Like To Try Again Please Press 2"))
except ValueError:
print("\nPlease Enter Only 1 Or 2")
if end==1:
exit()
elif end==2:
continue
我已经从头开始定义了end,但是错误是NameError: name 'end' is not defined
我什至尝试了将end NameError: name 'end' is not defined
全局。
仅当没有ValueError
时才将end
分配给。 如果int()
引发异常,则分配永远不会发生 。
要么在try
内测试有效的end
值(这样您就不会引发异常),要么为默认值指定第一个end
。
例如,以下内容不会引发您的异常,并且如果输入的不是1
或2
则仍然提示用户重新输入数字:
while True:
try:
end=int(input("If You Dont Want To Buy Anything Press 1 To Exit\nOr If You Would Like To Try Again Please Press 2"))
if end==1:
exit()
elif end==2:
break
except ValueError:
pass
print("\nPlease Enter Only 1 Or 2")
请注意,我移动的print()
是外侧的except
块; 如果抛出异常,或者没有执行break
或exit()
,它将被打印出来。 注意,我在这里使用break
而不是continue
退出while True
循环; continue
,则只会开始下一个迭代,提示用户再次输入数字。
其他人解释了这个问题。 这是一个规范的解决方案。 这与我们许多人对待流程的方式相符:-抓取答复-直到得到合法答复为止-...告诉用户出了什么问题-...得到新的答复
input_prompt = "If You Don't Want To Buy Anything Press 1 To Exit\nOr If You Would Like To Try Again Please Press 2"
response = input(input_prompt)
while response != '1' and response != '2':
print("\nPlease Enter Only 1 Or 2")
response = input(input_prompt)
end = int(reponse)
这没有异常退出(更难跟踪和维护),也没有异常处理(缓慢)。
它尝试为end分配一个值,但是捕获到ValueError,并且在except之后尝试查看“ end”是什么,但是由于异常,它从未被分配任何值。
如果int(input(...))
失败,则会引发ValueError
。 这发生在分配end
之前。 例如,在错误处理中添加另一个控制语句
while True:
try:
end=int(input("If You Dont Want To Buy Anything Press 1 To Exit\nOr If You Would Like To Try Again Please Press 2"))
except ValueError:
print("\nPlease Enter Only 1 Or 2")
continue # ask again
if end==1:
exit()
elif end==2:
continue
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.