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