【问题标题】:Except error for a name除了名称错误
【发布时间】:2016-05-04 21:51:12
【问题描述】:

我正在做的算术测验程序有问题。当我输入一个名字时,测验应该打印欢迎信息但是如果我输入一个空白或数字,那么程序应该循环问题但告诉用户,他们犯了一个错误。我使用 try 语句和 NameError 语句来尝试解决这个问题,但是当我使用函数“except”并在空闲状态下运行它时,它说我的语法无效。

这是我要修复的代码:

import random 
while True:
    try:
        UserName = input("What is your name:")
        except NameError:
            print ("The answer given does not compute!! Try again")
            continue
        else:
            break

        print(UserName," welcome to the Arithmetic Quiz.")

我已经编辑了程序的代码,但是当我尝试在空闲状态下运行它时,它仍然会突出显示除了,然后说无效的语法。

【问题讨论】:

  • 你的 except 缩进级别错误
  • 可以添加错误信息吗?看起来except NameError: 没有正确对齐,至少在您的示例中,它应该与它对应的 try: 语句对齐。
  • @busfault 当然可以。
  • NameError 与输入是否是一个有效的人名无关。它表示变量查找未找到该变量的值。如果您在调用input 时遇到此类错误,则说明您使用的是Python 2,您应该使用raw_input。 Python 2 的input 本质上不是一个好主意。
  • @super123:那么该行不能引发 NameError。如果要验证输入的名称,则必须手动检查您感兴趣的条件。

标签: python exception exception-handling


【解决方案1】:

您不需要try-except 来检查空字符串

while True:
    UserName = input("What is your name:")
    if not UserName:
        print("The answer given does not compute!! Try again")
        continue
    else:
        break
print(UserName," welcome to the Arithmetic Quiz.")

【讨论】:

  • 有没有办法让它在出现空格错误或数字时循环问题。@cricket_007
  • 我现在明白你的意思,所以如果值检查是空的,你不要使用 try 函数@cricket_007
  • 对于数字,您可以使用if UserName.isdigit() 检查是否输入了超过空格的内容,您可以检查if UserName.strip()
  • 不知道你知道有什么书里面有这个信息请@cricket_007
  • 不知道任何书。我学到的所有 python 都是通过在线阅读 Python 文档。
【解决方案2】:

这是try: except: else: 块的正确缩进

import random 
while True:
    try:
        UserName = input("What is your name:")
    except NameError: 
        print("The answer given does not compute!! Try again")
        continue
    else:
        break
print(UserName," welcome to the Arithmetic Quiz.")

警告(感谢 cricket_007)这个循环永远不会结束。我的意思是这个评论显示try: 缩进应该如何用于 OP。

【讨论】:

  • 这是正确的缩进,但循环永远不会退出
  • @cricket_007 我的意思是只显示 OP 的缩进应该是什么样的。我想我应该详细说明一下 :-) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2018-08-22
  • 2016-10-14
相关资源
最近更新 更多