即使它是python名称也没有定义

时间:2016-05-25 17:16:54

标签: python nameerror

我知道这是基本的,但实际上我甚至不知道自己做错了什么。

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

我确实在开始时定义了结尾,但错误是NameError: name 'end' is not defined我甚至试图将结束视为全局。

4 个答案:

答案 0 :(得分:4)

end仅在没有ValueError时分配。如果int()引发异常,则分配永远不会发生

测试end内的有效try end(以便您知道没有引发任何异常),或者首先将默认值分配给1

例如,如果输入了2while 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循环; private string PrettyPrintGenericTypeName(Type p) { if (p.IsGenericType) { var simpleName = p.Name.Substring(0, p.Name.IndexOf('`')); var genericTypeParams = p.GenericTypeArguments.Select(PrettyPrintGenericTypeName).ToList(); return string.Format("{0}<{1}>", simpleName, string.Join(", ", genericTypeParams)); } else { return p.Name; } } 将开始下一次迭代,提示用户再次输入数字。

答案 1 :(得分:1)

其他人解释了这个问题;这是一个规范的解决方案。这符合我们许多人对此过程的看法:   - 抓住回复   - 直到我收到法律回复   - ...告诉用户出了什么问题   - ......获得新回复

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)

这没有不自然的循环退出(更难以遵循和维护),也没有异常处理(慢)。

答案 2 :(得分:0)

它尝试为end分配一个值,但是捕获一个ValueError,并且在except之后它试图查看'end'是什么,但是由于Exception,它从未被赋值。

答案 3 :(得分:0)

如果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