python有兩種錯誤,一種是語法錯誤,一種是異常
語法錯誤也稱為解析錯誤,是在語句或表示式上的語法錯誤
異常是在執行期間檢測的錯誤,可以**捉並在程式中處理
>>> while true:
... try:
... x = int(input("please enter a number: "))
... break
... except valueerror:
... print("oops! that was no valid number. try again...")
raise語句可以強行引發乙個指定的異常
>>> raise nameerror('xixi')
raise exception([value])
raise的引發的異常必須為乙個異常例項或異常類,value是乙個說明異常細節的可選值
>>> raise exception('xix','haha')
traceback (most recent call last):
file "", line 1, in exception: ('xix', 'haha')
如果需要引發異常,但不打算處理它,raise語句後不帶任何引數,則會再次引發上乙個異常
>>> try:
... raise valueerror
... except valueerror:
... print("將會再次引發異常")
... raise
...將會再次引發異常
traceback (most recent call last):
file "", line 2, in valueerror
try語句可能有多個except子句,以指定不同的異常處理程式,但是最多有乙個處理程式會被執行
except 語句可以將多個異常包裝為元組來捕捉
except語句可以使用as 限定符來為異常提供乙個變數名稱
except語句如果不帶任何異常型別,將捕捉所有異常
try:
...
except (ioerror, typeerror) as e: #同時捕捉多個異常
...except valueerror as e: #為異常起乙個名字
...except nameerror:
pass
except : #捕捉所有異常
...raise
也可以使用pass語句來忽略異常
首先,執行try子句中**塊
如果為發生任何異常忽略,except子句
如果try**塊發生異常,則跳過該子句其餘部分
如果由except捕捉,則執行該except子句的**,然後繼續執行try...except語句後的**
如果沒有**捉,則傳遞給上層**(try語句可能會被包括再上層try語句中),當傳遞到程式的最頂層依然為**捉,它就成為乙個未處理異常,程式會終止執行並顯示一條如上所示的資訊。
因此異常處理程式,不僅能處理再try子句中直接引發的異常,也能處理在try子句中呼叫的函式發生的異常
try...except語句還有乙個可選的else子句,該子句必須放在所有except子句後面
如果try**塊中**不引發異常,則執行else子句的**
try:
...except:
...else:
print("no exception")
finally子句提供了無論是否出現異常都必須執行的**
如果try子句中引發異常,並且沒有except子句捕捉處理或異常發生在except或else子句中,那麼在執行完finally子句後將重新引發這個異常
try語句由break,continue,return語句離開時同樣會執行finally語句
可以使用finally子句來釋放外部資源,例如檔案和網路連線,無論資源是否被成功使用
f = open('a','r')
try:
...finally:
f.close()
exception所有的非退出類異常的基類
generatorexit有生成器的.close()方法引發
keyborderinterrupt由鍵盤中斷引發,通常為ctrl+c
systemexit 程式退出/終止
可以通過使用exception來捕捉除與程式退出相關異常之外的所有異常
try:
...except exception as e:
print('an error occurred : %s \n' % e)
不過捕捉所有exception異常可能會無法報告準確的資訊,影響程式的除錯
except語句可以不帶任何異常,這樣可以作為萬用字元來捕獲所有異常
最好在處理完異常後再重新提出異常,來允許呼叫者處理異常
try:
...raise keybordinterrupt
except:
print('捕捉到異常')
raise
except子句中使用as var為異常指定的名稱變數,這個變數會繫結到乙個異常例項,同時異常的引數將存放到例項args中
異常例項定義了__str__(),因此異常的引數可以直接列印
>>> try:
... raise exception('spam', 'eggs')
... except exception as e:
... print(type(e)) # the exception instance
... print(e.args) # arguments stored in .args
... print(e) # __str__ allows args to be printed directly,
... # but may be overridden in exception subclasses
... x, y = e.args # unpack args
python異常處理 Python 異常處理
使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...
python異常舉例 Python異常處理
1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...
python異常處理
當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...