【问题标题】:Python exception handling ValueErrorPython异常处理ValueError
【发布时间】:2022-01-29 03:09:11
【问题描述】:

当我传递一个字符时,为什么except ValueError as ve 块没有被执行?

class Division :
    def divide(numerator, denominator):
        try:
            print(f"Result  : {(numerator/denominator)}")
        except ValueError as ve:
            print("Invalid input given",ve)
        except Exception as e :
            print(f"Exception caught : {e} ")

    if __name__ == "__main__" :
        a = int(input("Enter the numerator - "))
        b = int(input("Enter the denominator - "))
        divide(a,b)

O/P:

Enter the numerator - A
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in Division
ValueError: invalid literal for int() with base 10: 'A'

相反,我希望看到print("Invalid input given",ve) 被执行。

【问题讨论】:

  • 像这样使用class 完全没有意义。
  • 在您调用 divide() 之前,int(input(...)) 行上发生了错误。

标签: python valueerror except


【解决方案1】:

因为正是这一行产生了错误:

a = int(input("Enter the numerator - "))

您尝试将一个字符转换为整数。

【讨论】:

    【解决方案2】:

    如果您查看错误中的跟踪信息,您的divide 函数不会引发异常。如果您使用下面的代码在不强制转换的情况下收集用户输入,则可以避免在除法函数之外抛出此异常。

    if __name__ == "__main__" :
        a = input("Enter the numerator - ")
        b = input("Enter the denominator - ")
        divide(a,b)
    

    正如 Karl 在评论中指出的那样,您需要将值转换为 int 在您的 divide 函数中,而不是在那里生成 ValueError 。否则会抛出 TypeError。

    【讨论】:

    • 好的,但这并不能有意义地解决问题。无论用户输入什么,input 都会返回一个字符串。除法将失败并显示TypeError,不会触发 OP 想要的子句。
    • @KarlKnechtel - 公平点。 OP 必须要么处理该额外错误,要么在除法函数中执行强制转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2011-10-09
    • 2017-04-05
    相关资源
    最近更新 更多