try: f = open('x','r') except IOError: raise except Exception: print 'other error' raise
有天某個人問我,為什麼,既然已經是抓到問題了,為什麼還要 raise,把它丟出去呢?也許有很多理由,但我有兩個簡單的理由:(1)我想直接讓程式被停掉,(2)我想讓執行我寫的程式的程式也知道有問題,讓它自己決定該怎麼辦。這在寫程式給別的程式用的時候很重要。
在 raise exception 的時候,我以前是寫成以下這樣:
try: f = open('x','r') except Exception, ex: print 'other error' raise ex
這樣在文句上好像很正常,但是就會出現困擾的地方,就是 traceback 所指的 exception 行號是在 raise 的地上,而不是真正發生的地方。
後來才發現,應該直接 raise 後面不加參數,才會如下指到對的行數去。IOError Traceback (most recent call last)in () 3 except Exception, ex: 4 print 'other error' ----> 5 raise ex IOError: [Errno 2] No such file or directory: 'x'
IOError Traceback (most recent call last)in () 1 try: ----> 2 f = open('x','r') 3 except IOError: 4 raise 5 except Exception: IOError: [Errno 2] No such file or directory: 'x'
沒有留言:
張貼留言