Python特殊字符異常處理示例詳解
在 Python 編程中,程序錯(cuò)誤主要分為三類:
| 類型 | 說(shuō)明 |
|---|---|
| 語(yǔ)法錯(cuò)誤 | 代碼不符合 Python 語(yǔ)法規(guī)范,無(wú)法運(yùn)行 |
| 邏輯錯(cuò)誤 | 程序能運(yùn)行,但結(jié)果不符合預(yù)期 |
| 運(yùn)行時(shí)錯(cuò)誤(異常) | 程序在運(yùn)行過(guò)程中發(fā)生的錯(cuò)誤 |
其中,我們今天重點(diǎn)討論的就是——異常(Exception)。
1. 異常的本質(zhì)
- 異常是程序運(yùn)行過(guò)程中發(fā)生的事件
- 會(huì)影響程序的正常執(zhí)行
- 如果不處理,會(huì)導(dǎo)致程序崩潰
常見(jiàn)異常示例:
1 / 0
# ZeroDivisionError: division by zero
'2' + 2
# TypeError: can only concatenate str (not "int") to str
open('file.txt')
# FileNotFoundError二、異常的類型
Python 中所有異常都繼承自:
BaseException └── Exception
常見(jiàn)異常類型:
| 異常類型 | 觸發(fā)場(chǎng)景 |
|---|---|
| NameError | 使用未定義變量 |
| TypeError | 數(shù)據(jù)類型不匹配 |
| ValueError | 傳入無(wú)效參數(shù) |
| IndexError | 列表索引越界 |
| FileNotFoundError | 文件不存在 |
| ZeroDivisionError | 除以 0 |
三、異常處理核心:try-except
1. 基本語(yǔ)法
try:
可能出錯(cuò)的代碼
except 異常類型:
出錯(cuò)后的處理代碼
示例:
try:
x = 10 / 0
except ZeroDivisionError:
print("除數(shù)不能為0!")
2. 捕獲多個(gè)異常
try:
print(count)
arr = [1,2,3]
print(arr[5])
except NameError as e:
print("變量未定義:", e)
except IndexError as e:
print("索引越界:", e)
3. 捕獲所有異常
try:
...
except Exception as e:
print("發(fā)生異常:", e)
?? 不推薦濫用:
捕獲所有異常會(huì)掩蓋真實(shí)問(wèn)題,只建議在全局保護(hù)時(shí)使用
四、異常處理進(jìn)階結(jié)構(gòu)
1. try-except-else
try:
x = 10 / 2
except ZeroDivisionError:
print("錯(cuò)誤")
else:
print("沒(méi)有異常時(shí)執(zhí)行")
- try 沒(méi)異常 → 執(zhí)行 else
- try 有異常 → 不執(zhí)行 else
2. try-except-finally
try:
f = open("test.txt")
except:
print("出錯(cuò)")
finally:
print("無(wú)論如何都會(huì)執(zhí)行")- 關(guān)閉文件
- 釋放資源
- 斷開(kāi)連接
3. 完整結(jié)構(gòu)
try:
...
except:
...
else:
...
finally:
...
五、主動(dòng)拋出異常
1. raise 語(yǔ)句
age = 15
if age < 18:
raise ValueError("年齡必須大于18歲")
2. assert 斷言
assert age >= 18, "年齡必須>=18"
- 多用于測(cè)試階段
- 條件為 False 時(shí)拋出 AssertionError
六、異常的傳遞機(jī)制
異常具有“向上傳遞”的特性:
def func1():
return 10 / 0
def func2():
func1()
try:
func2()
except ZeroDivisionError:
print("已捕獲異常")- 下層未處理 → 向上層傳遞
- 直到被捕獲或程序崩潰
七、自定義異常
當(dāng)內(nèi)置異常無(wú)法滿足需求時(shí),可以自己定義:
class AgeError(Exception):
pass
age = 16
if age < 18:
raise AgeError("未滿18歲!")自定義異常的好處:
- 更符合業(yè)務(wù)語(yǔ)義
- 便于維護(hù)和調(diào)試
八、with 語(yǔ)句與異常
1. 為什么需要 with?
傳統(tǒng)寫法:
file = open("a.txt")
...
file.close()
如果中途報(bào)錯(cuò),文件可能無(wú)法關(guān)閉。
2. 使用 with
with open("a.txt") as f:
print(f.read())
優(yōu)勢(shì):
- 自動(dòng)釋放資源
- 更安全優(yōu)雅
3. 原理:上下文管理器
支持 with 的對(duì)象都實(shí)現(xiàn)了:
__enter__()__exit__()
我們也可以自定義:
class MyOpen:
def __enter__(self):
print("進(jìn)入")
def __exit__(self, type, val, tb):
print("退出")
九、異常處理最佳實(shí)踐
? 建議:
- 精準(zhǔn)捕獲異常類型
- 不要濫用
except Exception - 關(guān)鍵資源用
finally或with - 合理使用自定義異常
? 不建議:
- 空 except
- 吞掉異常不處理
- 用異常代替邏輯判斷
到此這篇關(guān)于Python特殊字符異常處理示例詳解的文章就介紹到這了,更多相關(guān)Python異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python torch.flatten()函數(shù)案例詳解
這篇文章主要介紹了Python torch.flatten()函數(shù)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
使用python庫(kù)xlsxwriter庫(kù)來(lái)輸出各種xlsx文件的示例
這篇文章主要介紹了使用python庫(kù)xlsxwriter庫(kù)來(lái)輸出各種xlsx文件的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
利用Python將原始邊列表轉(zhuǎn)換為鄰接矩陣的過(guò)程
有時(shí)候,我們會(huì)從外部數(shù)據(jù)源中得到原始的邊列表,而需要將其轉(zhuǎn)換為鄰接矩陣以便進(jìn)行后續(xù)的分析和處理,本文將介紹如何使用Python來(lái)實(shí)現(xiàn)這一轉(zhuǎn)換過(guò)程,需要的朋友可以參考下2024-04-04
在django中實(shí)現(xiàn)頁(yè)面倒數(shù)幾秒后自動(dòng)跳轉(zhuǎn)的例子
今天小編就為大家分享一篇在django中實(shí)現(xiàn)頁(yè)面倒數(shù)幾秒后自動(dòng)跳轉(zhuǎn)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
基于Django集成CAS實(shí)現(xiàn)流程詳解
這篇文章主要介紹了基于Django集成CAS實(shí)現(xiàn)流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Python文件操作指南解鎖三個(gè)txt文件合并技術(shù)
本文將深入介紹如何利用Python編寫腳本,將三個(gè)文本文件中指定的列數(shù)據(jù)合并成一個(gè)新文件,通過(guò)豐富的示例代碼和詳細(xì)解釋,幫助掌握這一實(shí)用而靈活的數(shù)據(jù)處理技巧2024-01-01

