Python 異常處理

2021-08-15 19:33:49 字數 3529 閱讀 2567

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...