[英]Python style: catching exceptions just to print them
我對Python的錯誤處理沒有豐富的經驗,並且想知道就樣式而言,如果您未在代碼中明確處理它,是否值得捕獲和打印仍然會引發的錯誤?
例如:
my_func(path):
try:
some_func_that_opens_file(path) # this would raise and IOError by itself
except IOerror as ex:
print ex # or alternatively print 'your file doesn't exist'
還是try / except的目的是捕獲錯誤並繼續執行其他操作而不管錯誤(否則程序會失敗)? 例如:
my_func(path):
try:
some_func_that_opens_file(path) # this would raise and IOError by itself
except IOerror:
fixed = fix_path(path) # makes the path what it needs to be
some_func_that_opens_file(fixed)
在問這個問題之前我進行了一些搜索,因此希望我的問題不會多余。
謝謝!
您可以處理異常以使代碼繼續; 另一種方法是讓默認處理程序(在解釋程序退出之前)打印回溯。
您可以處理不是代碼錯誤的異常。 有時,處理異常要比測試異常發生的可能性更為有效。 這被稱為尋求寬恕 ,而不是尋求許可 。
以在字典列表中收集信息為例。 您可以使用:
if key not in dictionary:
dictionary[key] = ['default', 'initial', 'value']
listval = dictionary[key]
listval.extend(['other', 'values'])
那是在征求許可,而:
try:
listval = dictionary[key]
except KeyError:
listval = dictionary[key] = ['default', 'initial', 'value']
listval.extend(['other', 'values'])
會請求原諒。 這明確地使用了異常處理。 如果缺少鍵的情況是例外情況 (不常見),則請求寬恕比請求許可要快 。
如果錯誤是最終用戶造成的並且可以預見,則您還需要處理異常,因為使用丑陋的回溯停止程序對用戶不友好。
但是,不應捕獲由於錯誤使用API引發的異常。 這種不正確的使用表明某處代碼存在錯誤,作為開發人員,您真的想知道哪里出了問題以及在哪里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.