婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python異常類型以及處理方法匯總

Python異常類型以及處理方法匯總

熱門標簽:小蘇云呼電話機器人 儋州電話機器人 地圖標注面積 朝陽手機外呼系統 佛山400電話辦理 北京電銷外呼系統加盟 市場上的電銷機器人 所得系統電梯怎樣主板設置外呼 北瀚ai電銷機器人官網手機版

前言

調試Python程序時,經常會報出一些異常,異常的原因一方面可能是寫程序時由于疏忽或者考慮不全造成了錯誤,這時就需要根據異常Traceback到出錯點,進行分析改正;另一方面,有些異常是不可避免的,但我們可以對異常進行捕獲處理,防止程序終止。

1 異常類型

1.1 Python內置異常

Python的異常處理能力是很強大的,它有很多內置異常,可向用戶準確反饋出錯信息。在Python中,異常也是對象,可對它進行操作。BaseException是所有內置異常的基類,但用戶定義的類并不直接繼承BaseException,所有的異常類都是從Exception繼承,且都在exceptions模塊中定義。Python自動將所有異常名稱放在內建命名空間中,所以程序不必導入exceptions模塊即可使用異常。一旦引發而且沒有捕捉SystemExit異常,程序執行就會終止。如果交互式會話遇到一個未被捕捉的SystemExit異常,會話就會終止。

內置異常類的層次結構如下:

BaseException  # 所有異常的基類
 +-- SystemExit  # 解釋器請求退出
 +-- KeyboardInterrupt  # 用戶中斷執行(通常是輸入^C)
 +-- GeneratorExit  # 生成器(generator)發生異常來通知退出
 +-- Exception  # 常規異常的基類
      +-- StopIteration  # 迭代器沒有更多的值
      +-- StopAsyncIteration  # 必須通過異步迭代器對象的__anext__()方法引發以停止迭代
      +-- ArithmeticError  # 各種算術錯誤引發的內置異常的基類
      |    +-- FloatingPointError  # 浮點計算錯誤
      |    +-- OverflowError  # 數值運算結果太大無法表示
      |    +-- ZeroDivisionError  # 除(或取模)零 (所有數據類型)
      +-- AssertionError  # 當assert語句失敗時引發
      +-- AttributeError  # 屬性引用或賦值失敗
      +-- BufferError  # 無法執行與緩沖區相關的操作時引發
      +-- EOFError  # 當input()函數在沒有讀取任何數據的情況下達到文件結束條件(EOF)時引發
      +-- ImportError  # 導入模塊/對象失敗
      |    +-- ModuleNotFoundError  # 無法找到模塊或在在sys.modules中找到None
      +-- LookupError  # 映射或序列上使用的鍵或索引無效時引發的異常的基類
      |    +-- IndexError  # 序列中沒有此索引(index)
      |    +-- KeyError  # 映射中沒有這個鍵
      +-- MemoryError  # 內存溢出錯誤(對于Python 解釋器不是致命的)
      +-- NameError  # 未聲明/初始化對象 (沒有屬性)
      |    +-- UnboundLocalError  # 訪問未初始化的本地變量
      +-- OSError  # 操作系統錯誤,EnvironmentError,IOError,WindowsError,socket.error,select.error和mmap.error已合并到OSError中,構造函數可能返回子類
      |    +-- BlockingIOError  # 操作將阻塞對象(e.g. socket)設置為非阻塞操作
      |    +-- ChildProcessError  # 在子進程上的操作失敗
      |    +-- ConnectionError  # 與連接相關的異常的基類
      |    |    +-- BrokenPipeError  # 另一端關閉時嘗試寫入管道或試圖在已關閉寫入的套接字上寫入
      |    |    +-- ConnectionAbortedError  # 連接嘗試被對等方中止
      |    |    +-- ConnectionRefusedError  # 連接嘗試被對等方拒絕
      |    |    +-- ConnectionResetError    # 連接由對等方重置
      |    +-- FileExistsError  # 創建已存在的文件或目錄
      |    +-- FileNotFoundError  # 請求不存在的文件或目錄
      |    +-- InterruptedError  # 系統調用被輸入信號中斷
      |    +-- IsADirectoryError  # 在目錄上請求文件操作(例如 os.remove())
      |    +-- NotADirectoryError  # 在不是目錄的事物上請求目錄操作(例如 os.listdir())
      |    +-- PermissionError  # 嘗試在沒有足夠訪問權限的情況下運行操作
      |    +-- ProcessLookupError  # 給定進程不存在
      |    +-- TimeoutError  # 系統函數在系統級別超時
      +-- ReferenceError  # weakref.proxy()函數創建的弱引用試圖訪問已經垃圾回收了的對象
      +-- RuntimeError  # 在檢測到不屬于任何其他類別的錯誤時觸發
      |    +-- NotImplementedError  # 在用戶定義的基類中,抽象方法要求派生類重寫該方法或者正在開發的類指示仍然需要添加實際實現
      |    +-- RecursionError  # 解釋器檢測到超出最大遞歸深度
      +-- SyntaxError  # Python 語法錯誤
      |    +-- IndentationError  # 縮進錯誤
      |         +-- TabError  # Tab和空格混用
      +-- SystemError  # 解釋器發現內部錯誤
      +-- TypeError  # 操作或函數應用于不適當類型的對象
      +-- ValueError  # 操作或函數接收到具有正確類型但值不合適的參數
      |    +-- UnicodeError  # 發生與Unicode相關的編碼或解碼錯誤
      |         +-- UnicodeDecodeError  # Unicode解碼錯誤
      |         +-- UnicodeEncodeError  # Unicode編碼錯誤
      |         +-- UnicodeTranslateError  # Unicode轉碼錯誤
      +-- Warning  # 警告的基類
           +-- DeprecationWarning  # 有關已棄用功能的警告的基類
           +-- PendingDeprecationWarning  # 有關不推薦使用功能的警告的基類
           +-- RuntimeWarning  # 有關可疑的運行時行為的警告的基類
           +-- SyntaxWarning  # 關于可疑語法警告的基類
           +-- UserWarning  # 用戶代碼生成警告的基類
           +-- FutureWarning  # 有關已棄用功能的警告的基類
           +-- ImportWarning  # 關于模塊導入時可能出錯的警告的基類
           +-- UnicodeWarning  # 與Unicode相關的警告的基類
           +-- BytesWarning  # 與bytes和bytearray相關的警告的基類
           +-- ResourceWarning  # 與資源使用相關的警告的基類。被默認警告過濾器忽略。

詳細說明請參考:https://docs.python.org/3/library/exceptions.html#base-classes

1.2 requests模塊的相關異常

在做爬蟲時,requests是一個十分好用的模塊,所以我們在這里專門探討一下requests模塊相關的異常。

要調用requests模塊的內置異常,只要“from requests.exceptions import xxx”就可以了,比如:

from requests.exceptions import ConnectionError, ReadTimeout

或者直接這樣也是可以的:

from requests import ConnectionError, ReadTimeout

requests模塊內置異常類的層次結構如下:

IOError
 +-- RequestException  # 處理不確定的異常請求
      +-- HTTPError  # HTTP錯誤
      +-- ConnectionError  # 連接錯誤
      |    +-- ProxyError  # 代理錯誤
      |    +-- SSLError  # SSL錯誤
      |    +-- ConnectTimeout(+-- Timeout)  # (雙重繼承,下同)嘗試連接到遠程服務器時請求超時,產生此錯誤的請求可以安全地重試。
      +-- Timeout  # 請求超時
      |    +-- ReadTimeout  # 服務器未在指定的時間內發送任何數據
      +-- URLRequired  # 發出請求需要有效的URL
      +-- TooManyRedirects  # 重定向太多
      +-- MissingSchema(+-- ValueError) # 缺少URL架構(例如http或https)
      +-- InvalidSchema(+-- ValueError) # 無效的架構,有效架構請參見defaults.py
      +-- InvalidURL(+-- ValueError)  # 無效的URL
      |    +-- InvalidProxyURL  # 無效的代理URL
      +-- InvalidHeader(+-- ValueError)  # 無效的Header
      +-- ChunkedEncodingError  # 服務器聲明了chunked編碼但發送了一個無效的chunk
      +-- ContentDecodingError(+-- BaseHTTPError)  # 無法解碼響應內容
      +-- StreamConsumedError(+-- TypeError)  # 此響應的內容已被使用
      +-- RetryError  # 自定義重試邏輯失敗
      +-- UnrewindableBodyError  # 嘗試倒回正文時,請求遇到錯誤
      +-- FileModeWarning(+-- DeprecationWarning)  # 文件以文本模式打開,但Requests確定其二進制長度
      +-- RequestsDependencyWarning  # 導入的依賴項與預期的版本范圍不匹配
 
Warning
 +-- RequestsWarning  # 請求的基本警告 

詳細說明及源碼請參考:http://www.python-requests.org/en/master/_modules/requests/exceptions/#RequestException

下面是一個簡單的小例子,python內置了一個ConnectionError異常,這里可以不用再從requests模塊import了:

import requests
from requests import ReadTimeout
 
 
def get_page(url):
 try:
  response = requests.get(url, timeout=1)
  if response.status_code == 200:
   return response.text
  else:
   print('Get Page Failed', response.status_code)
   return None
 except (ConnectionError, ReadTimeout):
  print('Crawling Failed', url)
  return None
 
 
def main():
 url = 'https://www.baidu.com'
 print(get_page(url))
 
 
if __name__ == '__main__':
 main()

1.3 用戶自定義異常

此外,你也可以通過創建一個新的異常類擁有自己的異常,異常應該是通過直接或間接的方式繼承自Exception類。下面創建了一個MyError類,基類為Exception,用于在異常觸發時輸出更多的信息。

  在try語句塊中,拋出用戶自定義的異常后執行except部分,變量 e 是用于創建MyError類的實例。

class MyError(Exception):
	def __init__(self, msg):
		self.msg = msg
	
	def __str__(self):
		return self.msg
 
 
try:
	raise MyError('類型錯誤')
except MyError as e:
	print('My exception occurred', e.msg)
 

2. 異常捕獲

當發生異常時,我們就需要對異常進行捕獲,然后進行相應的處理。python的異常捕獲常用try...except...結構,把可能發生錯誤的語句放在try模塊里,用except來處理異常,每一個try,都必須至少對應一個except。此外,與python異常相關的關鍵字主要有:

關鍵字 關鍵字說明
try/except 捕獲異常并處理
pass 忽略異常
as 定義異常實例(except MyError as e)
else 如果try中的語句沒有引發異常,則執行else中的語句
finally 無論是否出現異常,都執行的代碼
raise     拋出/引發異常

異常捕獲有很多方式,下面分別進行討論。

2.1 捕獲所有異常

包括鍵盤中斷和程序退出請求(用sys.exit()就無法退出程序了,因為異常被捕獲了),因此慎用。

try:
     語句>
 
except:
 
      print('異常說明')

2.2 捕獲指定異常

try:
     語句>
 
except 異常名>:
 
      print('異常說明')

萬能異常:

try:
     語句>
 
except Exception:
 
      print('異常說明')

一個例子:

try:
    f = open("file-not-exists", "r")
 
except IOError as e:
 
    print("open exception: %s: %s" %(e.errno, e.strerror))

2.3 捕獲多個異常

捕獲多個異常有兩種方式,第一種是一個except同時處理多個異常,不區分優先級:

try:
     語句>
 
except (異常名1>, 異常名2>, ...):
 
      print('異常說明')

第二種是區分優先級的:

try:
     語句>
 
except 異常名1>:
 
      print('異常說明1')
 
except 異常名2>:
 
      print('異常說明2')
 
except 異常名3>:
 
      print('異常說明3')

該種異常處理語法的規則是:

  • 執行try下的語句,如果引發異常,則執行過程會跳到第一個except語句。
  • 如果第一個except中定義的異常與引發的異常匹配,則執行該except中的語句。
  • 如果引發的異常不匹配第一個except,則會搜索第二個except,允許編寫的except數量沒有限制。
  • 如果所有的except都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。

2.4 異常中的else

如果判斷完沒有某些異常之后還想做其他事,就可以使用下面這樣的else語句。

try:
     語句>
 
except 異常名1>:
 
      print('異常說明1')
 
except 異常名2>:
 
      print('異常說明2')
 
else:
 
      語句>  # try語句中沒有異常則執行此段代碼

2.5 異常中的finally

try...finally...語句無論是否發生異常都將會執行最后的代碼。

try:
     語句>
 
finally:
 
      語句>

看一個示例:

str1 = 'hello world'
try:
    int(str1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
else:
    print('try內沒有異常')
finally:
    print('無論異常與否,都會執行我')

2.6 raise主動觸發異常

可以使用raise語句自己觸發異常,raise語法格式如下:

raise [Exception [, args [, traceback]]]

語句中Exception是異常的類型(例如ValueError),參數是一個異常參數值。該參數是可選的,如果不提供,異常的參數是"None"。最后一個參數是跟蹤異常對象,也是可選的(在實踐中很少使用)。

看一個例子:

def not_zero(num):
    try:
        if num == 0:
            raise ValueError('參數錯誤')
        return num
    except Exception as e:
        print(e)
 
 
not_zero(0)
 

2.7 采用traceback模塊查看異常

發生異常時,Python能“記住”引發的異常以及程序的當前狀態。Python還維護著traceback(跟蹤)對象,其中含有異常發生時與函數調用堆棧有關的信息。記住,異常可能在一系列嵌套較深的函數調用中引發。程序調用每個函數時,Python會在“函數調用堆棧”的起始處插入函數名。一旦異常被引發,Python會搜索一個相應的異常處理程序。如果當前函數中沒有異常處理程序,當前函數會終止執行,Python會搜索當前函數的調用函數,并以此類推,直到發現匹配的異常處理程序,或者Python抵達主程序為止。這一查找合適的異常處理程序的過程就稱為“堆棧輾轉開解”(StackUnwinding)。解釋器一方面維護著與放置堆棧中的函數有關的信息,另一方面也維護著與已從堆棧中“輾轉開解”的函數有關的信息。

格式如下:

try:
    block
 
except:
 
    traceback.print_exc()

舉個栗子:

try:
    1/0
except Exception as e:
    print(e)

如果我們這樣寫的話,程序只會報“division by zero”錯誤,但是我們并不知道是在哪個文件哪個函數哪一行出的錯。

下面使用traceback模塊,官方參考文檔:https://docs.python.org/2/library/traceback.html

import traceback
 
try:
    1/0
except Exception as e:
    traceback.print_exc()

這樣就會幫我們追溯到出錯點:

Traceback (most recent call last):
  File "E:/PycharmProjects/ProxyPool-master/proxypool/test.py", line 4, in module>
    1/0
ZeroDivisionError: division by zero

另外,traceback.print_exc()跟traceback.format_exc()有什么區別呢?

區別就是,format_exc()返回字符串,print_exc()則直接給打印出來。即traceback.print_exc()與print(traceback.format_exc())效果是一樣的。print_exc()還可以接受file參數直接寫入到一個文件。比如可以像下面這樣把相關信息寫入到tb.txt文件去。

traceback.print_exc(file=open('tb.txt','w+'))

參考博文:

except as e中的‘e'的作用總結

python使用traceback獲取詳細的異常信息

總結

到此這篇關于Python異常類型以及處理方法的文章就介紹到這了,更多相關Python異常處理內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解Python魔法方法之描述符類
  • Python繪制分類圖的方法
  • python迭代器自定義類的具體方法
  • Python類型轉換的魔術方法詳解
  • class類在python中獲取金融數據的實例方法
  • Python類綁定方法及非綁定方法實例解析
  • 利用python批量爬取百度任意類別的圖片的實現方法
  • Python類方法總結講解

標簽:商丘 酒泉 龍巖 寧夏 金融催收 江蘇 云南 定西

巨人網絡通訊聲明:本文標題《Python異常類型以及處理方法匯總》,本文關鍵詞  Python,異常,類型,以及,處理,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python異常類型以及處理方法匯總》相關的同類信息!
  • 本頁收集關于Python異常類型以及處理方法匯總的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品1区2区3区| 99re成人在线| 国产精品福利在线播放| 欧美久久一二区| 粉嫩一区二区三区性色av| 午夜影视日本亚洲欧洲精品| 日韩一区欧美小说| 欧美精品一区二区三区蜜桃视频| 欧美久久婷婷综合色| 色婷婷精品久久二区二区蜜臀av| 国产激情一区二区三区桃花岛亚洲| 日韩综合小视频| 亚洲网友自拍偷拍| 亚洲日本一区二区| 国产精品网站在线播放| 欧美精品一区二区三区四区| 欧美大片一区二区| 国产日韩欧美高清| 亚洲国产精品v| 国产精品亲子伦对白| 日本一区二区三区高清不卡| 中文字幕第一区第二区| 国产精品系列在线| **性色生活片久久毛片| 一区二区三区鲁丝不卡| 亚洲成a人在线观看| 日本成人中文字幕在线视频| 久久99国产精品免费| 激情久久五月天| 国产一区二区电影| 成人不卡免费av| 欧美色欧美亚洲另类二区| 欧美揉bbbbb揉bbbbb| 欧美一区二区三区白人| 久久久久久一级片| 中文字幕精品一区| 亚洲国产精品影院| 精品一区二区在线播放| 在线播放日韩导航| 欧美国产日韩在线观看| 亚洲一区二区三区四区在线观看| 日本 国产 欧美色综合| 国产suv精品一区二区三区| 欧美日韩另类国产亚洲欧美一级| 欧美精品丝袜中出| 欧美一区二区三级| 亚洲精品综合在线| 国产原创一区二区| 欧美浪妇xxxx高跟鞋交| 欧美电影免费观看高清完整版在 | 色综合久久九月婷婷色综合| 日韩欧美美女一区二区三区| 一区二区三区在线免费视频| 国产一区二区三区国产| 欧美在线色视频| 亚洲男人电影天堂| 成人免费毛片高清视频| 国产亚洲精品bt天堂精选| 美女视频网站久久| 欧美一区二区三区视频在线 | 激情综合色播激情啊| 欧美专区日韩专区| 日韩一区欧美小说| 国产一区二区美女诱惑| 91麻豆精品国产91久久久| 亚洲美女区一区| a在线欧美一区| 亚洲色图在线视频| 国产.欧美.日韩| 久久综合av免费| 国产福利一区二区| 国产精品久久久久久久久免费樱桃| 福利一区二区在线| 久久精品一级爱片| 99精品在线观看视频| 国产日韩精品一区二区三区在线| 国产美女精品人人做人人爽 | 欧美日韩国产高清一区二区三区 | 欧美日韩亚洲不卡| 婷婷成人综合网| xfplay精品久久| 顶级嫩模精品视频在线看| 亚洲精品五月天| 91精品视频网| 麻豆精品在线观看| 欧美大片国产精品| 99久久精品免费精品国产| 一区二区三区蜜桃网| 日韩一级片在线观看| 国产在线精品视频| 亚洲欧美激情小说另类| 欧美日韩中文字幕一区二区| 亚洲va韩国va欧美va精品| 777xxx欧美| 不卡欧美aaaaa| 国产精品情趣视频| 欧美精品一区二区三区很污很色的 | 欧美一区二区三区免费视频| 国产伦精品一区二区三区视频青涩| 国产精品国产三级国产有无不卡| 欧美吻胸吃奶大尺度电影| 国产一区二区三区综合| 一区二区三区精密机械公司| 久久精品夜色噜噜亚洲aⅴ| 欧美日韩国产大片| 91视频xxxx| 久久国产精品第一页| 一区二区在线观看视频| 精品少妇一区二区三区免费观看| 97久久精品人人爽人人爽蜜臀| 日韩一区二区三区观看| 高清不卡一区二区| 亚洲国产成人av| 久久久五月婷婷| 欧美videos中文字幕| 在线日韩一区二区| 91蜜桃在线观看| 波多野结衣中文字幕一区二区三区| 久久精品99国产精品| 一区二区成人在线观看| 欧美激情一区在线观看| 日韩一区二区高清| 强制捆绑调教一区二区| 久久精品国产第一区二区三区| 91精品国产品国语在线不卡| 91看片淫黄大片一级在线观看| 蜜臀av性久久久久av蜜臀妖精| 亚洲精品乱码久久久久久久久| 欧美日韩美少妇| 国产a久久麻豆| 国产91高潮流白浆在线麻豆| 国产精品1区2区| 亚洲国产日韩综合久久精品| 99视频一区二区| 狠狠狠色丁香婷婷综合激情| 激情丁香综合五月| 亚洲一区二区不卡免费| 国产一区二区福利视频| 丁香另类激情小说| jlzzjlzz欧美大全| 91在线观看下载| 国产一区不卡在线| 国产福利不卡视频| 色视频一区二区| 日韩视频免费观看高清在线视频| 欧美福利一区二区| 欧美精品一区视频| 中文字幕人成不卡一区| 亚洲男人的天堂在线aⅴ视频| 一片黄亚洲嫩模| 欧美一区二区三区四区视频| 欧美日韩1234| 久久久亚洲精品一区二区三区| 久久久久久久性| 亚洲人吸女人奶水| 麻豆精品视频在线观看免费| 国产一级精品在线| 欧美精品高清视频| 亚洲视频免费观看| 国产在线不卡一卡二卡三卡四卡| 在线观看三级视频欧美| 国产精品天美传媒沈樵| 日韩精品免费视频人成| 色噜噜偷拍精品综合在线| 国产亚洲欧美日韩日本| 另类的小说在线视频另类成人小视频在线| 91在线视频免费91| 亚洲国产精品二十页| 国产成人精品一区二区三区网站观看| 4438亚洲最大| 日本伊人色综合网| 在线免费观看成人短视频| 国产日韩欧美精品综合| 捆绑调教一区二区三区| 欧洲av一区二区嗯嗯嗯啊| 国产精品伦一区| 国产一本一道久久香蕉| 精品久久久网站| 激情综合网激情| 日韩欧美一级片| 日韩电影在线一区| 91精品国产麻豆| 精品午夜久久福利影院| 欧美成人一区二区| 久久精品国产一区二区三区免费看| 欧美日韩一区三区四区| 亚洲福利一区二区三区| 欧美日韩美少妇 | 欧美日韩一区二区三区四区五区| 亚洲欧洲综合另类| 欧美视频第二页| 久久99国产精品麻豆| 国产无遮挡一区二区三区毛片日本| 国产成人福利片| 一区二区视频免费在线观看| 欧美日韩一区在线观看| 韩国av一区二区三区在线观看| 久久色.com| 91香蕉视频污在线| 一区二区三区精品|