以下是否有區別?提高命名和未命名例外的區別
try:
<some code>
except SomeException as err:
raise err
try:
<some code>
except SomeException:
raise
以下是否有區別?提高命名和未命名例外的區別
try:
<some code>
except SomeException as err:
raise err
try:
<some code>
except SomeException:
raise
第一個從再次提升的點重新寫入異常的堆棧跟蹤,因此它顯示在行raise err
處已經被提出。第二個單獨離開堆棧跟蹤,所以它顯示在<some code>
的某個地方被提出。
According to the documentation,利用自身的raise
聲明只是重新引發的最後一個異常的是,在目前的範圍是積極的。 raise err
解析err[, None, None]
並確定需要提高err
。
這意味着第一個版本(raise err
)會給raise err
行作爲堆棧跟蹤的基礎。裸聲raise
聲明熄滅並重新引發最後一個錯誤而不觸及它,這將保留原始堆棧跟蹤。
# raise err
Traceback (most recent call last):
File "foo.py", line 4, in <module>
raise err
Exception: bar
# raise
Traceback (most recent call last):
File "foo.py", line 2, in <module>
raise Exception('bar')
Exception: bar
是的。 except SomeException as err
會讓那麼你在那個異常對象的函數調用,如本教程的代碼片段顯示:
except IOError as e: print "I/O error({0}): {1}".format(e.errno, e.strerror)
然後,您可以再次加註其在任一片段。
請注意,區別在於'raise'語句,而不是'except'語句。即使你已經完成了'SomeException as err:',你仍然可以使用「anonymous」'raise'來傳遞異常。 – abarnert