代码之家  ›  专栏  ›  技术社区  ›  Crystal

Python:如何解决Try-Except函数的TypeError问题?

  •  0
  • Crystal  · 技术社区  · 3 年前

    我是一个python新手,我想了解如何避免Try and Except函数中出现TypeError错误。

    鉴于

    a= 0 (usually I have a number (>=1), but I could get 0 as an input)
    b= 0 (usually I have a number (>=1), but I could get 0 as an input)
    

    这是代码:

    try:
      h = a/b
    except ZeroDivisionError:
      h = 0
    

    以下是错误消息:

    TypeError: catching classes that do not inherit from BaseException is not allowed
    
    2 回复  |  直到 3 年前
        1
  •  1
  •   tubular    3 年前

    错误告诉您您的自定义异常 ZeroDivisionError 必须从继承 BaseException 班

    class MyZeroDivisionError(Exception):
        pass
    

    也就是说,这个错误随基本Python一起出现。事实上,你的片段对我有效,我无法复制 TypeError 。你能分享一个可复制的例子吗?还是你代码的其余部分?

        2
  •  0
  •   crissal    3 年前

    可能你创建了 class ZeroDivisionError 确实如此 不 继承自 Exception ,从而产生错误。

    如果发生内置异常(文档: click me ),你最好用它。

    >>> try:
    ...   5/0
    ... except ZeroDivisionError:
    ...   print("Cannot divide by zero!")
    ...
    Cannot divide by zero!
    

    编辑:要创建一个可以被程序捕获的自定义类,您可以执行以下操作:

    >>> class MyException(Exception):
    ...   pass
    ...
    >>> try:
    ...   raise MyException("My error message")
    ... except MyException as e:
    ...   print(e)
    ...
    My error message