python異常處理

一:錯誤簡述

    在程序的運行過程中,總會遇到各種各樣的錯誤。

    程序中的錯誤:代碼錯誤,即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

發佈了53 篇原創文章 · 獲贊 34 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章