一:錯誤簡述
在程序的運行過程中,總會遇到各種各樣的錯誤。
程序中的錯誤:代碼錯誤,即bug
用戶輸入錯誤:用戶輸入不正確的格式,如輸入爲空等
難以預測的錯誤:寫入文件時磁盤滿了寫不進;從網絡抓取數據,突然斷網了
二:錯誤提示信息
三:錯誤處理
程序中的錯誤和用戶輸入錯誤要求寫代碼的程序員們自己去修復;對那些程序運行過程中難以預測的錯誤才應該使用python的異常處理機制。
出現錯誤時,錯誤會在程序中一級級往上報,直到碰到能處理該錯誤的異常處理機制,否則一直報到最上層,直至終止程序。
# python異常處理機制
try:
#try代碼塊
x = 4
l = [1,2,3,4]
y= l[x]
print(x)
# except (NameError,SyntaxError,IndexError): # 可以採用這種格式同時捕獲多個異常類型
# print('NameError or SyntaxError or IndexError')
except NameError: # 捕獲NameError錯誤;except的個數不固定,隨需求而變
print('NameError')
except IndexError as error_value: # 使用 as 可以得到異常的值,接收值的變量名是自定義的
print('IndexError:',error_value)
except Exception as error_value: # 可以捕獲任何異常
print('萬能異常',error_value)
else: # 不能單獨與try使用,即在else前必須有異常處理 except (可選)
print('只在try代碼塊沒有拋出異常的情況下執行')
finally: # (可選)
print('無論try代碼塊是否有異常,最後都會執行這裏的代碼')
# 斷言 用於代碼調試的一種方法
# x = 2
# assert x<3,'x shoud lower 3' # x小於3時才能執行後面的代碼,否則拋出異常,並打印異常提示信息
# print(x)
# raise 主動拋出異常
while True:
x=3
y = input('>>:').strip()
if y.isdigit():
y = int(y)
else:
# raise ValueError('invalid value')
raise #自己處理不了,把異常拋出去,讓頂層調用者去處理
四:自定義錯誤類型
python中的錯誤類型也是一個類,其繼承關係如下:
# 自定義異常類型,繼承自Exception
class InputError(Exception):
def __init__(self,error_info):
super().__init__(self)
self.error_info = error_info
def __str__(self):
return self.error_info
if __name__ == '__main__':
try:
raise InputError('Invalid input')
except InputError as error_value:
print(error_value) #Invalid input