Python基礎 - 08異常
阿新 • • 發佈:2021-10-15
Python基礎 - 08異常
一、語法錯誤和異常
1.1概念
def func():
number += 1
func() # UnboundLocalError: local variable 'number' referenced before assignment
異常:程式執行時報出的錯誤。xxxError。
def chu(a, b):
return a / b
# chu(1,0) # ZeroDivisionError: division by zero
1.2異常處理
try: 可能出現異常的程式碼 except: 出現異常後執行的程式碼異常處理結構1:finally: pass
def func():
try:
n1 = int(input('輸入第一個數字:'))
n2 = int(input('輸入第二個數字:'))
sum = n1 + n2
print('和是:', sum)
except:
print('輸入數字錯誤')
func()
'''
輸入第一個數字:c
輸入數字錯誤
'''
異常處理結構2: 多個Except, Exception要放在最後; except Exception as err , err的內容是錯誤資訊
# 如果有多個except,異常型別的順序需要注意,Exception放在最後 def func1(): try: n1 = int(input('輸入第一個數字:')) n2 = int(input('輸入第二個數字:')) oper = input('輸入運算子(+ - * /):') result = 0 if oper == '+': result = n1 + n2 elif oper == '-': result = n1 + n2 elif oper == '/': result = n1 / n2 elif oper == '*': result = n1 * n2 else: print('符號輸入錯誤!') print('結果是:',result) with open(r'e://app//081.txt','r') as stream: lines = stream.readlines() print(lines) except ZeroDivisionError: print('除數不能為零') except ValueError: print('必須輸入數字') except Exception as err: print('出錯啦', err) func1() """ 輸入第一個數字:5 輸入第二個數字:0 輸入運算子(+ - * /):/ 除數不能為零 ---------------------------- 輸入第一個數字:c 必須輸入數字 ---------------------------- 輸入第一個數字:1 輸入第二個數字:2 輸入運算子(+ - * /):+ 結果是: 3 出錯啦 [Errno 2] No such file or directory: 'e://app//081.txt' """
異常處理結構3: 在try ... except ... else ...結構中,使用else則try程式碼塊中不能出現return
def func2(): try: n1 = int(input('輸入數字:')) print(n1) except ValueError: print('輸入的不是數字') else: # 沒有異常才會執行的程式碼塊 print('輸入完畢') func2() ''' 輸入數字:6 6 輸入完畢 --- 輸入數字:n 輸入的不是數字 '''
異常處理結構4: try ... except ...finally ...結構,無論是否異常,finally程式碼塊都會執行
場景:檔案操作stream = open(...) stream.read() stream.close() 資料庫操作close()
def func4(): stream = None try: stream = open(r'e://app/081.txt','r') lines = stream.readlines() print(lines) except Exception as err: print(err) finally: print('******') if stream: stream.close() func4() ''' ['本次的運算結果為0'] ****** ---------------------- [Errno 2] No such file or directory: 'e://app/081.txt' ****** '''
帶返回值的結構
def func5(): stream = None try: stream = open(r'e://app/08.txt','r') lines = stream.readlines() print(lines) return 1 except Exception as err: print(err) return 2 finally: print('******') if stream: stream.close() return 3 x = func5() print(x) # 無論是否報錯,都是 3
二、丟擲異常
raise
def register(): username = input('請輸入使用者名稱:') if len(username) < 6: raise Exception('使用者長度必須大於6位!') else: print('輸入的使用者名稱為:', username) register() ''' 請輸入使用者名稱:admin Traceback (most recent call last): File "E:\PythonLearn\pythonBase\02door2\08-except-01.py", line 180, in <module> register() File "E:\PythonLearn\pythonBase\02door2\08-except-01.py", line 176, in register raise Exception('使用者長度必須大於6位!') Exception: 使用者長度必須大於6位! '''
try: register() except Exception as err: print(err) else: print('註冊成功!') ''' 請輸入使用者名稱:admin 使用者長度必須大於6位! '''
Exception繼承結構