異常處理的用法:為了確保程式的健全性與容錯性,即在遇到錯誤時程式不會崩潰,我們需要對異常進行處理,
#1,如果錯誤發生的條件是可預測的,我們需要用if進行處理,在錯誤發生之前進行預防
AGE=10 while True: age=input('>>: ').strip() if age.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的 age=int(age) if age == AGE: print('you got it') break
2,如果錯誤發生的條件是不可預測的,則需要用到try..except:在錯誤發生之後進行處理
#基本語法為
try:
被偵測的程式碼區塊
#except 異常類型:
try中一旦偵測到異常,就執行這個位置的邏輯
#举例 try: f=open('a.txt') g=(line.strip() for line in f) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) except StopIteration: f.close()
五,try...except...的詳細用法
#我們把可能發生錯誤的語句放在try模組裡,用except來處理異常。 except可以處理一個專門的異常,也可以處理一組圓括號中的異常,如果except後沒有指定異常,則預設處理所有的異常。每一個try,都必須至少有一個except
1,例外類別只能來處理指定的例外狀況,如果非指定例外則無法處理
s1 = 'hello' try: int(s1) except IndexError as e: # 未捕获到异常,程序直接报错 print e
2,多分支
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e)
3,萬能異常Exception
s1 = 'hello' try: int(s1) except Exception as e: print(e)
4,多分支+Exception
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) except Exception as e: print(e)
5,異常的其他機構(try...finally語法)
try. ..finally語句無論是否發生異常都會執行最後的程式碼。語法如下:
try: <语句> finally: <语句> #退出try时总会执行 raise
範例:
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) #except Exception as e: # print(e) else: print('try内代码块没有异常则执行我') finally: print('无论异常与否,都会执行该模块,通常是进行清理工作')
6,主動觸發異常(raise語句)
我們可以使用raise語句自己觸發異常,raise語法格式如下:
raise [Exception [, args [, traceback]]]
語句中Exception是例外的型別(例如,NameError)參數是一個例外參數值。此參數是可選的,如果不提供,異常的參數是"None"。
最後一個參數是可選的(在實踐中很少使用),如果存在,則是追蹤異常物件。
範例:
一個異常可以是一個字串,類別或物件。 Python的核心提供的異常,大多數都是實例化的類,這是一個類別的實例的參數。
定義一個異常非常簡單,如下所示:
def functionName( level ): if level < 1: raise Exception("Invalid level!", level) # 触发异常后,后面的代码就不会再执行
try: raise TypeError('类型错误') except Exception as e: print(e)
7,自訂異常
透過建立一個新的異常類,程式可以命名它們自己的異常。異常應該是典型的繼承自Exception類,透過直接或間接的方式。
以下為與BaseException相關的實例,實例中建立了一個類,基類為BaseException,用於在異常觸發時輸出更多的資訊。
在try語句區塊中,使用者自訂的例外後執行except區塊語句,變數 e 是用來建立Networkerror類別的實例。
class Networkerror(BaseException): def __init__(self,msg): self.msg=msg def __str__(self): return self.msg try: raise Networkerror('类型错误') except Networkerror as e: print(e)
8,斷言:assert條件
assert 1 == 1 assert 1 == 2
9,總結try...except
1,把錯誤處理和真正的工作分開來
2,程式碼更容易組織,更清晰,複雜的工作任務更容易實現
3,毫無疑問,更安全了,不至於由於一些小的疏忽而使程式意外崩潰了
以上是python處理異常有哪些方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!