Python 初学者帮助输入错误处理

Python beginner help input error handling

我刚刚开始学习 Python 并且正在尝试处理用户可能输入的错误。程序所做的就是使用数学模块,要求用户输入一个整数和 returns 数字的阶乘。

我正在尝试捕获负数、浮点数和文本的错误。

如果我输入一个整数,代码会正常运行。

当我输入错误的值时,例如 -9 或 apple,try/except 似乎没有捕捉到错误,我得到了回溯信息。用户不应该看到这个。

有什么建议或指点吗?

import math
from datetime import datetime
import time

num = 0
start = 0
end = 0
# max value is 2147483647
#if __name__ == '__main__':
try:
    num = input("Enter a number: ")
except OverflowError:
    print("Input cannot exceed 2147483647")
except ValueError:
    print("Please enter a non-negative whole number")
except NameError:
    print("Must be an integer")
else:
    start = datetime.now()
    print("The factorial of ", num, " is : ")
    print(math.factorial(int(num)))
    end = datetime.now()
    print(f"Time taken in (hh:mm:ss.ms) is {end - start}")

如果重要的话,我正在 Windows 10 Pro(64 位)PC 上使用 Python 3.10。

诺曼

这是因为 input() 不会仅仅因为您只需要一个数字而引发错误。您必须自己检查输入的类型,然后自己引发错误。 例如

if not isinstance("string", int):
    raise ValueError

编辑:也可以在这里查看有关 input() 的更多信息:https://www.python-kurs.eu/python3_eingabe.php 它总是 returns 一个字符串,所以你必须主动将你的输入转换成你想要的类型,并检查你的类型 during/after 转换

您的代码缺少可能导致异常的操作:实际上,input('...') returns 一个表示任何用户输入的字符串。这意味着您的 num 变量是一个字符串(您可以通过打印 type(num).
来检查 您必须尝试将其转换为整数:

try:
   num = int(input('...'))
except ValueError:
   print('invalid input')

注意:如果用户输入值“-3”,它将被接受:字符串将被转换为整数 -3,这是正确的。
如果用户输入像 'apple' 这样的单词或像 3.14 这样的浮点数,引发的异常是 ValueError
我的建议是做这样的事情:

try:
   num = int(input('...'))
   if num >= 0:
      # computing factorial
   else:
      print('error: only positive numbers will be accepted')
      return
except ValueError:
   print('invalid input')

我选择了 yondaime 提供的路径并且非常接近我想要的。最终结果如下。

感谢大家的评论。上一次我做任何有点像编程的事情是在 IBM 360 上用 Fortran 打孔卡。

很抱歉问了这么基本的问题,但我真的很努力。

代码有效,但实际上并没有准确指出发生的错误。我将尝试弄清楚如何将输入语句中的字符串转换为浮点数并查看是否有余数(可能是模数?)以便用户更好地提示哪里出了问题。

import math
from datetime import datetime
import time

num = 0
start = 0
end = 0

try:
   num = int(input('Enter a positive whole number: '))
   if (num >= 0 and num <= 2147483647):
       start = datetime.now()
       print("The factorial of ", num, " is : ")
       print(math.factorial(int(num)))
       end = datetime.now()
   else:
      print('Number must be between 0 and 2147483647 are allowed.')
      print(f"Time taken in (hh:mm:ss.ms) is {end - start}")
except ValueError:
    print('Text or decimal numbers are not allowed. Please enter a whole number between 0 and 2147483647')

我有很多时间学习,因为我退休后很无聊...

诺曼