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