Python 異常和錯誤處理時,try...except 、if...else... 哪個更好一些,為什么?
The point is that using try/except statements is in many cases much more natural (more “Pythonic”) than if/else, and you should get into the habit of using them where you can.
這個是《Beginning Python From Novice to Professional, 2nd Edition》里的原話,但 StackOverflow 里又有
Why is “except: pass” a bad programming practice?
我就疑惑了……到底哪個好一些?還是說有更好的方法?
3 回答

千巷貓影
TA貢獻1829條經驗 獲得超7個贊
異常的時候,使用try...except
正常的程序流程使用 if...else
以數組為例,比如讀取數組下標越界,你的程序中并不期盼由此發展出功能 。
try:
data=array[x][y][z]
except Exception:
data=None
# 或者定義任何你不期盼發生的情況下的默認處理
但是,假如你的程序設計里,數組的越界與否是 功能 具體實現的一部分,那么就應該使用if...else保證語義清晰。
if x< len(array):
if y< len(array[x]):
else:
else:
但,也不是絕對,如果可視性與語義沖突,我個人以為 可視性>=語義清晰。比如簡單而又易發的單句越界檢查,即使越界在設計里是異常,但因為if的語句少過try,則我以為可以寫if。
總的來說,raise就是把所有狀態拋出,可以在任意上層處理,if...else 則是就地的代碼分支.

月關寶盒
TA貢獻1772條經驗 獲得超5個贊
異常處理當然 try/except
Why is “except: pass” a bad programming practice?
并不是在說 try/except 作為異常處理不好
這應該是在說 except 不catch具體的錯誤 pass 不處理錯誤不好
因為這等于一個異常處理的空殼, 并沒有真的處理異常
添加回答
舉報
0/150
提交
取消