为什么我不断收到“ NameError”?

时间:2020-01-28 02:00:10

标签: python python-3.7 nameerror

我已经使用Python进行了这个小型编码练习了几个小时:

def collatz(number):
        if number % 2 == 0:
            print(number // 2)
            return number // 2

        elif number % 2 == 1:
            result = 3 * number + 1
            print(result)
            return result

print('Enter a number: ')
try:
    enter = int(input())
except ValueError:
    print('Please type an integer. Try again...')

while enter != 1:
    enter = collatz(enter)

当输入数字并且输入非整数值时,它似乎正常工作,我得到了正确的响应,但在响应后仍然出现此错误:

Enter a number: 
Hello
Please type an integer. Try again...
Traceback (most recent call last):
  File "C:/Users/P1ttstop/PycharmProjects/sweigartLearning/collatzSequence.py", line 17, in <module>
    while enter != 1:
NameError: name 'enter' is not defined

我一直在尝试解决此问题,但令我沮丧的是,我似乎无法弄清楚。这是怎么回事?

2 个答案:

答案 0 :(得分:0)

来自Python文档的NameError异常是:

在找不到本地或全局名称时引发。这仅适用于不合格的名称。关联的值是一条错误消息,其中包含找不到的名称。

一个ValueError异常是:

在操作或函数接收到类型正确但值不合适的参数时引发,并且这种情况没有通过诸如IndexError之类的更精确的异常来描述。


运行此行并输入字符串“ Hello”后,您将收到ValueError异常:

enter = int(input())

然后,except块将处理此错误,这意味着将不会为enter变量分配值“ Hello”。由于从未定义enter变量,因此以下行将产生NameError:

while enter != 1:

答案 1 :(得分:0)

我已经测试了代码,并修改了一部分。

def collatz(number):
        if number % 2 == 0:
            print(number // 2)
            return number // 2

        elif number % 2 == 1:
            result = 3 * number + 1
            print(result)
            return result

print('Enter a number: ')
try:
    enter = int(input())
    while enter != 1:
        enter = collatz(enter)
except ValueError:
    print('Please type an integer. Try again...')

输入数字:您好

请输入一个整数。再试一次...