目錄
異常捕獲
對於有可能會出錯的代碼, 我們可以對這行代碼進行異常捕獲。
try-except
try-except-else
try-except-else-finally
try-except-finally
示例:
try:
a = int(input('請輸入一個數字:'))
except:
print('出錯啦!(try裏面的代碼出現了異常執行except中的代碼)')
else:
print('try裏面的代碼沒有出現異常的時候執行else中的代碼')
finally:
print('不管代碼是否出現異常,都會執行!')
捕獲指定類型的異常
示例:
try:
a = int(input('請輸入一個數字:'))
print(b)
except NameError: # 指定異常纔會被捕獲。出現其他異常還是會報錯。
print('出錯啦!(出現NameError會打印)')
可以定義變量來接收異常
示例:
try:
a = int(input('請輸入一個數字:'))
print(b)
except NameError as e:
print('當前出錯的原因:', e) # 輸出結果:name 'b' is not defined
print('出錯啦!(出現NameError會打印)')
捕獲多個異常
示例:
# 方法一:使用多個except(不同的異常類型,可以做不同的處理)
try:
a = int(input('請輸入一個數字:'))
print(b)
except NameError as e:
print('當前出錯的原因:', e)
print('出錯啦!(出現NameError會打印)')
except ValueError as e2:
print('當前出錯的原因:', e2)
print('出錯啦!(出現ValueError會打印)')
# 方式二:一個except(不同異常做相同處理)
try:
a = int(input('請輸入一個數字:'))
print(b)
except (NameError, ValueError) as e:
print('當前出錯的原因:', e)
print('出錯啦!(出現NameError, ValueError會打印)')
# 注意:上述代碼中,try的第一行代碼出現異常,try中的第二行代碼就不會執行了
捕獲不確定的異常
捕獲不確定的異常, 可以直接捕獲常見異常類型的父類
示例:
try:
import requests
requests.ger(url='www.baidu.com')
except Exception as e:
print('出錯的原因:', e)
else場景應用
示例:
import os
# 複製指定路徑下的文件到當前文件所在的目錄
def file_copy(path):
try:
file_list = os.listdir(path)
except FileNotFoundError as e:
print('你傳入的路徑不對,出現了錯誤,錯誤提示{}'.format(e))
# 獲取文件路徑沒有出錯才執行以下代碼
else:
for file in file_list:
# 定位目標目錄的文件
file_path = os.path.join(path, file)
# 如果是文件,則進行文件複製
if os.path.isfile(file_path):
# 讀取文件的內容
with open(file_path, 'rb') as f:
content = f.read()
# 將上面讀取到的內容寫入到新文件中, 新文件跟當前文件同級,並且命名帶有cp
# with open(os.path.join(os.getcwd(), 'cp' + file), 'wb') as f:
with open('cp' + file, 'wb') as f:
f.write(content)
file_copy('path')
finally應用場景
示例:
# 通過finally來關閉文件
f = open('case.txt', 'w', encoding='utf-8')
try:
n= input('請輸入數字:')
except:
f.write('代碼錯誤了!')
else:
f.write('代碼沒有錯誤了!')
finally:
print('finally執行了!')
f.close()
raise主動拋出異常
示例:
print('-----------------------')
# raise ValueError('這個自定的錯誤提示')
raise AssertionError
print('-----------------------')
assert斷言
示例:
excepted = '用例執行通過'
result = '用例執行未通過'
assert excepted == result # 不相等,會拋出異常AssertionError