如果我有一个1/0
的表达式,很明显,它会出错:
try:
1/0
except ZeroDivisionError as err:
print(err) # this prints: division by zero
第二次尝试,用raise ZeroDivisionError
替换1/0
。。。你知道吗
try:
raise ZeroDivisionError
except ZeroDivisionError as err:
print(err) # this prints: (nothing)
它什么也没印出来。是不是一个来自raise
的异常,和一般表达式一样?你知道吗
另外,如何更清楚地理解这种差异?你知道吗
所有异常都是
BaseException
的子类,因此所有内置异常都应该具有args
属性。你知道吗当引发异常时,
args
元组或字符串可以作为第一个参数提供。你知道吗来自} return's ^{} ,因为这是BaseException的默认行为;如果异常类重写BaseException的
except Exception as err:
的err
是异常实例,当您print(err)
时,实际上是在调用异常的__str__
方法。大多数Exception class's ^{__str__
,则__str__
将返回其他值。你知道吗当您提出一个普通的
ZeroDivisionError
时,您没有提供args
,并且ZeroDivisionError
没有一个自定义的__str__
方法,因此它在默认情况下打印了args
,即a.k.aargs = None
。你知道吗至于你的问题:
是的。它们是一样的。你知道吗
这将输出与
1/0
相同的结果。你知道吗我继续向前,在source code中挖掘。
//
(整数除法)和/
(真除法)的错误消息略有不同。但它们基本上是这样定义的:而
size_b
是除数。如您所见,1/0
或任何被零除的除法都会产生一个ZeroDivsionError
,args
设置为"division by zero"
或"integer division or modulo by zero"
,具体取决于您如何除法。你知道吗相关问题 更多 >
编程相关推荐