Python 为什么我总是得到一个';名称错误';?

Python 为什么我总是得到一个';名称错误';?,python,python-3.7,nameerror,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 re

我已经用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
输入一个数字:
你好
请键入一个整数。再试一次。。。
回溯(最近一次呼叫最后一次):
文件“C:/Users/P1ttstop/PycharmProjects/sweigartnearning/collatzSequence.py”,第17行,在
当进入时!=1:
NameError:未定义名称“enter”

我一直在试图解决这个问题,但令我沮丧的是,我似乎无法解决它。这里发生了什么?

摘自Python文档,NameError异常是:

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

ValueError异常是:

当操作或函数接收到类型正确但值不正确的参数,并且该情况未由更精确的异常(如Indexer Ror)描述时引发


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

except块随后将处理此错误,这意味着enter变量将永远不会被赋值为“Hello”。由于从未定义enter变量,以下行将生成NameError:

while enter != 1:

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

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...')
输入一个号码:你好

请键入一个整数。再试一次

由于
enter=int(input())
失败,因此在进入
while enter!=1:
您可能应该将输入代码放入循环中。。。
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...')