在程式設計過程中為了增加友好性,在程式出現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...