艺赛旗(RPA)Python 学习之异常
藝賽旗 RPA8.0全新首發(fā)免費下載 點擊下載
http://www.i-search.com.cn/index.html?from=line1 詳細內(nèi)容請參看藝賽旗官網(wǎng)支持欄目:RPA社區(qū)
點擊鏈接進入http://support.i-search.com.cn/
異常是一個事件,該事件會在程序執(zhí)行過程中發(fā)生,影響了程序的正常執(zhí)行。一般情況下,在 Python 無法正常處理程序時就會發(fā)生一個異常。異常是 Python 對象,表示一個錯誤。當 Python 腳本發(fā)生異常時我們需要捕獲處理它,否則程序會終止執(zhí)行
造成異常的原因:1. 程序編寫有問題造成,產(chǎn)生 Bug ,必須處理 2. 用戶輸入造成的 3. 無法預料的異常:磁盤已滿、斷網(wǎng)等
Python 的錯誤其實也是類 class,錯誤類型種類很多。而且所有的錯誤類型都繼承自 BaseException
為什么要處理異常?為了使程序遇到問題時不讓程序結(jié)束,而越過錯誤繼續(xù)向下執(zhí)行。Python 內(nèi)置了一套異常處理機制,來幫助我們進行錯誤處理
處理異常:try except finally 作用:try 語句塊用來檢測程序中的錯誤,從而讓 except 語句捕獲錯誤信息并處理。執(zhí)行完 except 后,如果有 finally 語句塊,則執(zhí)行 finally 語句塊,至此,執(zhí)行完畢。
常用操作:
報出對應的異常:
try:
print(3 / 0)
except ZeroDivisionError as e:
print(“除數(shù)為零了”)
except NameError as e:
print(“變量未定義”)
else: # 注意:else語句可有可無
print(“代碼沒有問題”)
print(“程序繼續(xù)執(zhí)行”)
2. 報出對應的異常:
try:
print(4 / 0)
except: # 使用 except 捕獲常規(guī)錯誤,而不使用任何的錯誤類型
print(“程序出現(xiàn)了錯誤”)
使用 except 帶著多種異常,匹配到其中一種即報錯
try:
print(5 / 0)
except(NameError, ZeroDivisionError):
print(“出現(xiàn)了 ZeroDivisionError 或 NameError”)
3. 特殊情況
“”"
特殊:
1.錯誤其實是 class(類),所有的錯誤都繼承自 BaseException,所以在
捕獲的時候,它不僅捕獲了該類型的錯誤,還把子類一網(wǎng)打盡
“”"
try:
print(5 / 0)
except BaseException as e:
print(“出現(xiàn)了BaseException”)
except ZeroDivisionError as e:# 不會被執(zhí)行
print(“除數(shù)為零了”)
“”"
2.跨越多層調(diào)用,main 調(diào)用了 func2 ,2 調(diào)用了 1 ,
1 出現(xiàn)了錯誤,但是只要main捕獲到了就可以處理
“”"
def func1(num):
print(1 / num)
def func2(num):
func1(num)
def main():
func2(0)
try:
main()
except ZeroDivisionError as e:
print(“調(diào)用的函數(shù)出現(xiàn)了錯誤”)
4.try except finally
try:
print(1 / 0)
except ZeroDivisionError as e:
print(“除數(shù)為零了”)
finally:
print(“finally是一定會被執(zhí)行的”)
try:
print(1 / 0)
finally:
print(“finally是一定會被執(zhí)行的”)
5.1 print() 語句調(diào)試
“”"
通過 print() 把可能有問題的變量打印出來
用 print()最大的壞處是將來還得刪掉它,
想想程序里到處都是print(),運行結(jié)果也會包含很多垃圾信息
“”"
def div(a, b):
print(b) # b可能會為 0
print(a / b)
div(10, 1)
5.2 assert 斷言調(diào)試
“”"
用 print() 來查看的地方,都可以用斷言(assert)來替代:
斷言失敗時,assert 語句本身就會拋出 AssertionError
“”"
def func(num, div):
assert (div != 0), “div不能為零”
return num / div
print(func(10, 0))
5.3 logging 調(diào)試
import logging
logging.basicConfig(level=logging.DEBUG)
“”"
logging 的好處:允許你指定記錄信息的級別,有debug,info,warning,error
4個級別,當我們指定 level=logging.INFO 時,logging.DEBUG 就不起作用了。
級別高的覆蓋級別低的,所以可以輸出不同級別的信息,也不用刪除,最后統(tǒng)一控制輸出各個級別的信息。
logging的另一個好處是通過簡單的配置,一條語句可以同時輸出到不同的地方,比如console和文件
“”"
def div(a, b):
logging.info(b)
print(a / b)
div(10, 0)
以上為個人整理,有問題的地方還請大家多提提意見。
總結(jié)
以上是生活随笔為你收集整理的艺赛旗(RPA)Python 学习之异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ad-hoc Testing(随机测试)
- 下一篇: 我想写简历