【问题标题】:Python beginner help input error handlingPython初学者帮助输入错误处理
【发布时间】:2022-01-02 09:19:42
【问题描述】:

我刚刚开始学习 Python,并且正在尝试处理用户可能输入的错误。程序所做的只是使用数学模块,向用户询问一个整数并返回该数字的阶乘。

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

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

当我输入错误的值(如 -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() 会自动引发这些异常?看起来您可能已经从 Python 2.x 中获得了一些信息,它会自动评估对 input() 的响应。在 Python 3 中,它只是将其作为字符串返回。
  • 您需要将try 放在实际发生错误的代码行周围。现在,您仅在 input 函数不起作用时检查错误

标签: python python-3.x error-handling


【解决方案1】:

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

我感谢你们所有人的 cmets。上一次我做任何有点像编程的事情是在 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')

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

诺曼

【讨论】:

    【解决方案2】:

    您的代码缺少可能导致异常的操作:事实上,input('...') 返回一个代表任何用户输入的字符串。这意味着您的 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')
    

    【讨论】:

      【解决方案3】:

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

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

      编辑:也可以在这里查看有关 input() 的更多信息:https://www.python-kurs.eu/python3_eingabe.php 它总是返回一个字符串,因此您必须主动将输入转换为您想要的类型,并在转换期间/之后进行类型检查

      【讨论】:

        猜你喜欢
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多