ValueError仍然存在于Except语句中

时间:2017-06-21 16:37:39

标签: python except

我正在尝试创建一个用于探索collat​​z序列的程序。它一直有效,直到我尝试添加tryexcept语句,以确保用户输入数字而不是文本。以下是代码:

def collatz(number):
    try:
        if number % 2 == 0:
            print(number // 2)
            return number // 2
        elif number % 2 == 1:
            result = 3 * number + 1
            print(result)
            return result
    except ValueError:
        print('That is not a number')

print('Enter a number')
n = int(input())

while n != 1:
    n = collatz(int(n))

如果我输入数字,我可以毫无问题地运行它。但是,当我输入" puppy"我遇到了这个:

Traceback (most recent call last):
  File "C:/Users/kredeker/Desktop/python/collatz2.py", line 14, in <module>
    n = int(input())
ValueError: invalid literal for int() with base 10: 'puppy'

我以为我用ValueError计算了这个:

except ValueError:
    print('That is not a number')

2 个答案:

答案 0 :(得分:2)

您收到错误n = int(input())

所以试试

try:
  n = int(input())
except ValueError:
  print('That is not a number')

完整的代码(以免您在&#39; n&#39;中出错):

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:
  n = int(input())
  while n != 1:
    n = collatz(n)
except ValueError:
  print('That is not a number')

答案 1 :(得分:2)

try...except仅适用于在这些单词之间运行的代码,包括函数调用。回溯显示,您的异常发生在第14行:

n = int(input())  # <---

是由您输入的字符串(puppy)无法解释为基数为10的整数引起的。

您需要将其包含在try ... except内;但更好的选择是采用 - 并适应 - this excellent answer的功能。