如何将try和except合并到python中的代码块中

时间:2019-05-24 13:41:35

标签: python

我正在使用python中的collat​​z序列代码。该代码应该给我一个以1结尾的数字序列。当我输入一个数字时,这里的代码就是这样做的。

    try:
    number = int(input('Pick a number'))
except ValueError:
    print('Error! input a number')
def collatz(number):
            if number % 2 == 0:
                x = number // 2
                return x
            else:
                x = 3 * number + 1
                return x

while number != 1:
        number = collatz(number)
        print(number)

但是,当我尝试通过输入字母来调用try andexcept函数时,我得到了所需的错误消息,但同时也收到了NameError。

Traceback (most recent call last):
  File "/home/PycharmProjects/collatz/collatz.py", line 14, in <module>
    while number != 1:
NameError: name 'number' is not defined
Error! input a number *Desired Error Message*

当我删除try和except函数时,我没有收到此错误。我尝试将“名称”定义为全局变量,并且也使用缩进,但似乎没有任何效果。我将不胜感激任何帮助。

我正在使用python 3.6。

2 个答案:

答案 0 :(得分:0)

出现NameError的原因是,number根本没有定义。对int的调用失败,因此对number的分配永远不会发生,您可以捕获并打印错误,然后继续进行即可。要强制用户输入有效的号码,您必须重复提示,直到用户输入正确的输入为止。

def read_number():
    while True:
        try:
            return int(input('Pick a number'))
        except ValueError:
            print('Error! Input a number')

然后,要读取数字序列,请执行以下操作:

while True:
    number = read_number()
    if number == 1:
        break

答案 1 :(得分:0)

如果您的ValueError得到提高,那么我认为您在其他任何地方都没有真正定义number。这就是为什么您的while循环会引发NameError的原因。