繁体   English   中英

python名称未定义,即使它是

[英]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

例如,以下内容不会引发您的异常,并且如果输入的不是12则仍然提示用户重新输入数字:

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块; 如果抛出异常,或者没有执行breakexit() ,它将被打印出来。 注意,我在这里使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM