會「打」打印錯誤是或不是?
不,全部raise
確實會重新引發異常,就像您沒有抓到它一樣。特別是,這種代碼:
try:
shutil.rmtree(temp_dir)
except:
raise
...是保證做同樣的事情(除了稍微慢一點,少了很多可讀)爲:
shutil.rmtree(temp_dir)
如果異常,最終傳播到頂層沒有在任何地方處理,Python將打印回溯並退出。但是如果其他代碼處理鏈中任何地方的異常,它可以做任何想要的事情。
如果您想要打印異常,則必須明確地執行此操作。例如:
try:
shutil.rmtree(temp_dir)
except Exception as e:
print(e)
raise
如果您想了解更多信息比print(e)
或print(repr(e))
給你,看到traceback
庫,它有一些檢索或傾倒有關異常和追溯信息的各種功能。特別是要得到,如果這件事發生在頂層,你會得到相同的輸出,這樣做:
try:
shutil.rmtree(temp_dir)
except Exception as e:
traceback.print_exc()
raise
因爲print_exc
直接獲取異常對象和其他信息了Python的膽量,你真的不這裏需要except Exception as e:
;你可以使用except Exception:
或except:
。
'try:'/'except:raise'什麼都不做(除了讓你的代碼更加冗長和稍慢)。你在說:「如果有任何例外,而不是提高它,讓我來處理它......通過提高它的方式來提高它。」那麼......你在那裏做什麼? – abarnert