python 基礎之異常處理

異常處理

1、異常處理

一、異常概念
異常是程序執行力過程當中出現的非正常的流程項目。
異常是沒法避免的,只能先預估出可能出現的異常現象,並提供對應的處理機制,在異常出現後保障程序不被中斷執行。
複製代碼
二、異常處理的基本語法

格式一(經常使用):python

try:
    可能引起異常現象的代碼
except:
    出現異常現象的處理代碼
複製代碼
try:
    print(a)  # 可能引起異常現象的代碼
except:
    print("變量a未定義")  # 出現異常現象的處理代碼
複製代碼

格式二(不經常使用):函數

try:
    可能引起異常現象的代碼
finally:
    try代碼塊結束後運行的代碼
複製代碼

格式三(完整格式):spa

try:
    可能引起異常現象的代碼
except:
    出現異常現象的處理代碼
else:
	未出現異常現象的處理代碼
finally:
	try代碼塊結束後運行的代碼
複製代碼
三、異常精細化處理
異常處理能夠根據不一樣種類的異常進行不一樣的處理方案設計,使用異常名稱來進行區分。標準格式以下:
	except 異常類名1 as 變量名:
		出現異常現象的處理代碼
	except 異常類名2 as 變量名:
	    出現異常現象的處理代碼
	except 異常類名3 as 變量名:
	    出現異常現象的處理代碼
	except Exception as 變量名:
	    出現異常現象的處理代碼
複製代碼
try:
    c = 0
    b = a /c
    print("b")
except NameError as error:  # 經過異常類名後面的變量名能夠獲取到具體異常信息
    print("a沒有被定義:"+ str(error))
except ZeroDivisionError as error:
    print("被除數不能爲零"str(error))
except Exception as error:
    print("未知錯誤"str(error))
複製代碼

上段代碼執行結果:設計

a沒有被定義:name 'a' is not defined
複製代碼

說明:code

  • 1.經過異常類名後面的變量名能夠獲取到具體異常信息
  • 2.執行了某個except中的內容後,其餘except中的內容將再也不執行
  • 3.Exception類是全部異常類的父類,可以攔截全部的異常現象,一般設置成最後一級的捕獲

四、異常對象主動拋出

異常對象可使用主動拋出的形式來構造,語法格式:對象

raise 異常對象
複製代碼
if y == 0:
    raise ZeroDivisionError("被除數不能爲零")
複製代碼

五、異常處理傳遞

異常出現後若是沒有被捕獲處理,該異常將會繼續向下傳遞,到下一次調用位置。input

狀況一:使用 try 嵌套處理string

"""使用 try 嵌套處理,先處理內層的異常,處理完後再處理外層異常"""
try:
    try:
        c = 0
        b = a /c
        print("b")
    except NameError as error:
        print("a沒有被定義:"+ str(error))
except ZeroDivisionError:
    print("被除數不能爲零")
except Exception:
    print("未知錯誤")
複製代碼

狀況二:函數、/方法調用,在任意位置處理it

"""最後調用處理"""
def oper1():
    print( 1 / 0 )

def oper2():
    oper1()

def oper3():
    oper2()

try:
    oper3()
except:
    print("處理")
複製代碼
"""中間調用處理"""
def oper1():
    print( 1 / 0 )

def oper2():
    try:
        oper1()
    except:
        print("處理掉")

def oper3():
    oper2()

oper3()
複製代碼

2、自定義異常

一、自定義異常基本語法
class 自定義異常類名(Exception):
    pass
複製代碼
二、自定義異常主動觸發
raise 異常類對象
複製代碼

案例:用戶登陸信息校驗

""" 案例:用戶登陸信息校驗 要求: 用戶輸入用戶名,密碼後對信息進行校驗 1.用戶名長度在3-8個字符 2.用戶名中只能出現英文字母和數字 3.密碼長度必須是6位 4.密碼必須由純數字組成 分析: 1.信息使用input操做獲取 2.定義自定義異常,描述非法信息 3.提供檢測的函數,針對狀況進行處理 4.執行程序中要使用try結構完成檢測 """

class NameError(Exception):
    pass


class PwdError(Exception):
    pass


def login(name,password):
    if  not 3<= len(name) <= 8:
        raise NameError("用戶名長度必須在3到8之間")
    if not name.isalnum():
        raise  NameError("用戶名必須由字母和數字組成")
    if len(password) != 6:
        raise PwdError("密碼的長度必須等於6位")
    if not password.isnumeric():
        raise PwdError("密碼必須由純數字組成")


name = input("請輸入用戶名:")
password = input("請輸入密碼:")


try:
    login(name, password)
except NameError as error:
    print(str(error))
except PwdError as error:
    print(str(error))
else:
    print("信息無誤,能夠正常使用")
複製代碼
相關文章
相關標籤/搜索