[Python] Catch exception 的兩種語法?
這應該算是我學 Python 以來,一個一直有的疑問了,
只是一直沒去把它搞清楚…
平常在 Python 裡 exception 的處理方法是像這樣:
try: # Do something... except IOError as e: print "Exception: %s" % (str(e))
但在專案程式以及其他的 Python 程式裡,
不乏以下的寫法:
except IOError, e: print "Exception: %s" % (str(e))
嗯… 看起來有點奇怪,
不過看久也猜的出它跟 exception IOError as e
是等價的。
如果我需要抓兩種以上的 exception 時,
第一種寫法會改成:
try: # Do something... except (IOError, OSError) as e: print "Exception: %s" % (str(e))
但是像 except IOError, e
這種寫法的話,
怎麼知道那個 e 到底是要抓的 exception 類型,
還是抓到的 exception 被指定到的變數呢?
今天終於決定去把它查清楚 (到底是有多懶)~
原來 except IOError, e
這種是 Python 2 一開始的語法,
在 Python 2.6 之後,為了減少混淆,
所以出現了 exception IOError as e
的語法,
但舊的語法在 Python 2.x 依然可以用。
只是到了 Python 3.x 之後,就完全只能用 exception IOError as e
的語法了~
話說,要是用舊的語法,但想抓兩種 exception 類型的話,
就要寫成:
except (IOError, OSError), e:
真的是看起來很奇怪就是了,
也難怪後來會有 PEP 來改掉這種容易搞混的寫法…
參考資料:
PEP 3110 — Catching Exceptions in Python 3000 | Python.org
Python try…except comma vs ‘as’ in except – Stack Overflow
python – Catch multiple exceptions in one line (except block) – Stack Overflow
(本頁面已被瀏覽過 943 次)