網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
異常對(duì)象
Python中遇到錯(cuò)誤后,會(huì)引發(fā)異常。
Python中使用異常對(duì)象來(lái)表示異常情況。
如果異常對(duì)象未被處理或者捕捉,程序就會(huì)用所謂的回溯(traceback)來(lái)終止執(zhí)行。
下面是一個(gè)例子:
def func1():
raise Exception
if __name__ == "__main__":
func1()
執(zhí)行之后報(bào)錯(cuò):
(venv) E:\Codes\python_everything\begining-python\src\08>list8-2.py
Traceback (most recent call last):
File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 19, in <module>
func1()
File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 15, in func1
raise Exception
Exception
異常有不同的類(lèi)型,Exception是基礎(chǔ)類(lèi),下面還有各種子類(lèi):
+-- Exception
+-- StopIteration
+-- StandardError
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
| +-- ImportError
| +-- LookupError
| | +-- IndexError
| | +-- KeyError
| +-- MemoryError
| +-- NameError
| | +-- UnboundLocalError
| +-- ReferenceError
| +-- RuntimeError
| | +-- NotImplementedError
| +-- SyntaxError
| | +-- IndentationError
| | +-- TabError
| +-- SystemError
| +-- TypeError
| +-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
還可以通過(guò)繼承Exception來(lái)實(shí)現(xiàn)自己的類(lèi):
class SomeError(Exception): pass
def func2():
raise SomeError
if __name__ == "__main__":
func2()
異常捕捉
異常可以被捕捉,需要使用try...except...語(yǔ)句:
class SomeError(Exception): pass
def func2():
raise SomeError
if __name__ == "__main__":
try:
func2()
except SomeError:
print("Some error happened")
這里捕捉到了參數(shù),所以就不會(huì)回溯:
(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
Some error happened
但是如果是其它的異常:
def func1():
raise Exception
class SomeError(Exception): pass
def func2():
raise SomeError
if __name__ == "__main__":
try:
func1()
except SomeError:
print("Some error happened")
這里的Exception就沒(méi)有被捕獲,所以還是會(huì)回溯:
(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
Traceback (most recent call last):
File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 27, in <module>
func1()
File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 15, in func1
raise Exception
Exception
如果沒(méi)有出現(xiàn)異常,則會(huì)繼續(xù)往下執(zhí)行,但是這里可以有else語(yǔ)句來(lái)執(zhí)行沒(méi)有異常時(shí)可以執(zhí)行的語(yǔ)句,使整個(gè)邏輯更通順:
if __name__ == "__main__":
try:
print("No exception")
except SomeError:
print("Some error happened")
else:
print("No error happened")
結(jié)果如下:
(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
No exception
No error happened
但是有時(shí)即使發(fā)生了無(wú)法捕捉的異常,也想要執(zhí)行一些語(yǔ)句,這個(gè)時(shí)候就可以使用finally語(yǔ)句:
def func1():
raise Exception
class SomeError(Exception): pass
def func2():
raise SomeError
if __name__ == "__main__":
try:
func1()
except SomeError:
print("Some error happened")
else:
print("No error happened")
finally:
print("Do something")
Python中更傾向于使用try...except...這樣的語(yǔ)句來(lái)代替if...else..語(yǔ)句。
原文鏈接:https://blog.csdn.net/jiangwei0512/article/details/106596297
相關(guān)推薦
- 2022-01-16 jQuery實(shí)現(xiàn)動(dòng)畫(huà)效果和導(dǎo)航欄動(dòng)態(tài)顯示
- 2022-08-21 golang字符串本質(zhì)與原理詳解_Golang
- 2023-07-25 適用SpringMVC實(shí)現(xiàn)圖片上傳功能
- 2022-04-04 webpack-plugins: plugin的使用 clean-webpack-plugin Cl
- 2022-06-01 分享Python?加速運(yùn)行技巧_python
- 2022-09-25 Linux系統(tǒng)CentOS的本地host查詢(xún)
- 2022-07-24 elment-ui的上傳組件圖片不回顯
- 2022-12-19 批處理bat腳本獲取打包發(fā)布問(wèn)題記錄_DOS/BAT
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支