Python 异常vs异常() print(异常为Exception()) 打印(异常==异常() 打印(类型(例外)) 打印(类型(异常()) 尝试: 引发异常 除例外情况外: 打印(“捕获异常和异常”) 尝试: 引发异常() 除例外情况外: 打印(“捕获异常()和异常”) 尝试: 引发异常 异常()除外: 打印(“捕获的异常和异常()”) 尝试: 引发异常() 异常()除外: 打印(“捕获的异常()和异常()”)

Python 异常vs异常() print(异常为Exception()) 打印(异常==异常() 打印(类型(例外)) 打印(类型(异常()) 尝试: 引发异常 除例外情况外: 打印(“捕获异常和异常”) 尝试: 引发异常() 除例外情况外: 打印(“捕获异常()和异常”) 尝试: 引发异常 异常()除外: 打印(“捕获的异常和异常()”) 尝试: 引发异常() 异常()除外: 打印(“捕获的异常()和异常()”),python,python-3.x,Python,Python 3.x,什么时候可以使用其中一个而不是另一个?被调用的表单()是否有未调用的用例不足以满足需要?这个问题适用于任何异常,而不仅仅是异常不同之处在于异常是一种类型,而异常()是该类的一个实例 因此,当引发异常时,会引发该类的实例: raise Exception("Something happened") 当您捕获到异常时,您基本上是说“这段代码将处理类型异常的任何实例”: 这也是您在问题中看到错误的原因: >>> TypeError: catching classes that do

什么时候可以使用其中一个而不是另一个?被调用的表单
()
是否有未调用的用例不足以满足需要?这个问题适用于任何异常,而不仅仅是
异常

不同之处在于
异常
是一种类型,而
异常()
是该类的一个实例

因此,当引发异常时,会引发该类的实例:

raise Exception("Something happened")
当您捕获到异常时,您基本上是说“这段代码将处理类型
异常
的任何实例”:

这也是您在问题中看到错误的原因:

>>> TypeError: catching classes that do not inherit from BaseException is not allowed
不允许捕获不是
异常的类型,并且
异常()
异常的实例,而不是派生类型


另请参见。

您肯定不需要调用构造函数。使用类名。我不明白。一个是类,另一个是实例。这与所有类/实例的情况类似。问题/问题到底是什么?不确定您的答案为什么被否决;它加上链接的答案就足够了。我本来打算在输入争论是不相关的,因为那个用例是显而易见的——我猜它毕竟在很大程度上是一个低级细节。
try: 
    raise Exception("Something happened")
except Exception as e: 
    print ("Caught an exception:", e) 
>>> TypeError: catching classes that do not inherit from BaseException is not allowed