IndexError 索引超出序列的範圍函數
KeyError 字典中查找一個不存在的關鍵字測試
NameError 嘗試訪問一個不存在的變量編碼
IndentationError 縮進錯誤spa
AttributeError 嘗試訪問未知的對象屬性操作系統
StopIteration 迭代器沒有更多的值code
AssertionError 斷言語句(assert)失敗對象
EOFError 用戶輸入文件末尾標誌EOF(Ctrl+d)繼承
FloatingPointError 浮點計算錯誤索引
GeneratorExit generator.close()方法被調用的時候進程
ImportError 導入模塊失敗的時候
KeyboardInterrupt 用戶輸入中斷鍵(Ctrl+c)
MemoryError 內存溢出(可經過刪除對象釋放內存)
NotImplementedError 還沒有實現的方法
OSError 操做系統產生的異常(例如打開一個不存在的文件)
OverflowError 數值運算超出最大限制
ReferenceError 弱引用(weak reference)試圖訪問一個已經被垃圾回收機制回收了的對象
RuntimeError 通常的運行時錯誤
SyntaxError Python的語法錯誤
TabError Tab和空格混合使用
SystemError Python編譯器系統錯誤
SystemExit Python編譯器進程被關閉
TypeError 不一樣類型間的無效操做
UnboundLocalError 訪問一個未初始化的本地變量(NameError的子類)
UnicodeError Unicode相關的錯誤(ValueError的子類)
UnicodeEncodeError Unicode編碼時的錯誤(UnicodeError的子類)
UnicodeDecodeError Unicode解碼時的錯誤(UnicodeError的子類)
UnicodeTranslateError Unicode轉換時的錯誤(UnicodeError的子類)
ValueError 傳入無效的參數
ZeroDivisionError 除數爲零
# (1)IndexError 索引超出序列的範圍
# lst = [1,2,3,4,5]
# res = lst[999]
# (2)KeyError 字典中查找一個不存在的關鍵字
dic = {'a':1,'b':2,'c':3}
# print(dic["d"])
# (3)NameError 嘗試訪問一個不存在的變量
#print(hhh)
# (4)IndentationError 縮進錯誤
if 5 == 5:
print(55)
# print(444)
# (5)AttributeError 嘗試訪問位置的對象屬性
class MyClass():
a = 5
b = 6
obj = MyClass()
#obj.c
# (6)StopIteration 迭代器沒有更多的值
it = iter(range(3))
for i in it:
print(i)
#res = next(it)
# (7)AssertionError 斷言語句(assert) 失敗
'''
#猜一猜 3大於1 嗎? 若是3大於1
# 若是猜錯了,直接拋異常
# 通常用在程序測試中
'''
#assert 3<1
"""
if 3<1:
print("成立")
"""
#格式:
try:
code1
code2
...
except:
code1
code2
把有可能出現異常的代碼放到try這個代碼塊當中
若是出現了異常錯誤,直接走execpt這個代碼塊
##例1:
try:
lst = [1, 2, 3, 4]
print(lst[9999]) #由於沒有9999的列表全部,全部程序有錯誤
except:
print("這個程序有錯誤")
# pass
execpt + 異常錯誤類 特指這種異常錯誤發生時,走該分支
#例2:
try:
#如下(1)(2)(3)一一對應,把一一對應的註釋去掉別的將其註釋就會到想要的數字程序走
#(1)
# lst = [1,2,3,45,6]
# print(lst[10])
#(2)
# dic = {'a':1}
# print(dic['b'])
#(3)
print(hh)
except IndexError:
#(1)
print("走到這裏,說明報的是索引下標越界錯誤.")
except KeyError:
#(2)
print("走到這裏,說明報的是字典的鍵出現錯誤")
except:
#(3)
# 條件都不知足,走except分支
print("程序有錯誤")
藉助異常處理類,接收生成器函數中的return 返回值
##例3:
def mygen():
yield 1
yield 2
return 3
# 實例化生成器函數 產生生成器對象 簡稱生成器
gen1 = mygen()
try:
res = next(gen1)
res = next(gen1)
res = next(gen1) # yield只有兩次,全部第三次調用報錯
print(res)
# as 及時用來起名字的,給StopIteration 的類[對象]起名字
except StopIteration as e:
'''
當咱們打印對象的時候,觸發__str__魔術方法
在StopIteration 這個類當中,自動接收異常return 的返回值
經過打印對象觸發__str__方法,進而把返回值打印出來
'''
print(e)
BaseExcepton 是全部異常類的父類(基類,超類) (子類的別名: 衍生類 派生類)
Exception 是全部普通錯誤處理類的父類
raise + (異常處理類 或 異常處理的對象)
#格式:
try:
raise
except:
pass
#返回時True .Exception 是 BaseException 的子類
res = issubclass(Exception, BaseException)
print(res)
#完整寫法
try:
#必須嵌入在try 這個代碼裏面使用
raise BaseException
except:
print("這個程序拋出了異常")
#簡寫寫法
'''
try:
raise
except:
print("程序拋出了異常")
'''
# return_errorinfo 必需要依靠異常的形式才能觸發獲取當前的行號或者文件名
def return_errorinfo(n):
import sys
f = sys.exc_info()[2].tb_frame.f_back
if n == 1:
return str(f.f_lineno) # 返回當前行數
elif n == 2:
return f.f_code.co_filename # 返回文件名
def get_info(n):
try:
raise BaseException
except:
return return_errorinfo(n)
#若是想要自定義異常類,必須繼承全部異常的父類BaseException
class MyException(BaseException):
def __init__(self, err_num, err_msg, err_line, err_filename):
#打印錯誤號
self.err_num = err_num
#打印錯誤信息
self.err_msg = err_msg
#打印錯誤的行號
self.err_line = err_line
#打印錯誤文件
self.err_filename = err_filename
human_sex = "中性"
try:
if human_sex == "中性":
raise MyException(1001, "人類沒有中性", get_info(1), get_info(2))
except MyException as e:
#打印錯誤號
print(e.err_num)
#打印錯誤信息
print(e.err_msg)
#打印錯誤的行號
print(e.err_line)
#打印錯誤文件
print(e.err_filename)
try:
print(name)
#不管是否報錯,都會執行finally裏面代碼塊
finally:
pass
若是有一些語句,計算在發送報錯的狀況也仍然要調用或處理一些邏輯
那麼使用finally
#例:
# try:
# print(name)
#
# finally:
# print(123)
# print(456)
try這個代碼塊若是有錯誤,不執行else代碼中的內容
若是沒有報錯,那麼執行else代碼塊中的內容
try ... execpt ... else 要配合使用else 不能單獨拿出來和try使用.
try ... finally .... 能夠配合在一塊兒使用
try: #print(name) print(123)except: passelse: print(789)