Python3異常處理

2022-05-16 17:00:29 字數 2233 閱讀 5191

在程式設計過程中為了增加友好性,在程式出現bug時一般不會直接將錯誤資訊展示給使用者,而是提供乙個友好的輸出提示。

1. 異常基礎

常用結構:

try:

pass

except exception,ex:

pass

其他結構:

try:

# 主**塊

pass

except keyerror,e:

# 異常時,執行該塊

pass

else:

# 主**塊執行完,執行該塊

pass

finally:

# 無論異常與否,最終執行該塊

pass

2. 異常種類

#  常用異常種類

attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror 輸入/輸出異常;基本上是無法開啟檔案

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

nameerror 使用乙個還未被賦予物件的變數

syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror 傳入物件型別與要求的不符合

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,

導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

3. 多個異常捕獲

try:

pass

except indexerror,e:

pass

except keyerror,e:

pass

except valueerror,e:

pass

4. 萬能異常捕獲

try:

pass

except exception,e:

pass

疑問:既然有了萬能異常,那麼我們還需要單異常捕獲或者多異常捕獲嗎?

自問自答:很多場景我們需要明確異常種類,根據異常種類能快速定位產生異常的原因。如果所有異常都用萬能異常捕獲,雖然避免了程式丟擲難看的異常,但是也無法幫助我們解決問題,常用思路是對於特殊的異常我們單獨做異常報錯,其他可以忽略的異常用萬能異常處理。

s1 = 'hello'

try:

int(s1)

except keyerror,e:

print('鍵錯誤')

except indexerror,e:

print('索引錯誤')

except exception, e:

print('錯誤')

5. 自定義異常

class myexception(exception):

def __init__(self, msg):

self.message = msg

def __str__(self):

return self.message

try:

raise myexception('我的異常')

except myexception,e:

print(e)

6. 主動觸發異常

try:

raise exception('錯誤了。。。')

except exception,e:

print(e)

7. 斷言

# 條件成立不報錯,反之報錯

# assert 條件

assert 1 == 1 # 條件成立,則繼續執行下面的**

assert 1 == 2 # 條件不成立,則報錯

Python3 異常處理

python3.5 異常處理 try用法 try except語句主要是用於處理程式正常執行過程中出現的一些異常情況 try finally語句則主要用於在無論是否發生異常情況,都需要執行一些清理工作的場合 完整語句中,else語句的存在必須以except x或者except語句為前提,也就是說el...

python3 異常處理

python中的異常捕獲 異常處理語句關鍵字有try except else finally,主要組合如下 1.不捕獲異常,不管是否異常仍要執行操作 finally 先執行finally中的語句,再丟擲異常。不捕獲異常,丟擲異常後,仍執行finally中的語句 try print 1 0 final...

python3 異常處理

try dic dic b keyerror lst a b lst 10 indexerror s 2gb s int s valueerror except valueerror as e e為異常的值 print e except keyerror as e print e except in...