日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

简明Python教程学习笔记_8_异常

發布時間:2024/7/23 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简明Python教程学习笔记_8_异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

菜鳥教程 之 Python 異常處理:http://www.runoob.com/python/python-exceptions.html

Python 一篇搞定所有的異常處理:https://www.cnblogs.com/wj-1314/p/8707804.html

?

Python?捕捉詳細異常堆棧的方法

Python 中使用?try except 的方法捕獲異常,可以獲取到異常的種類以及自定義異常,但是有時候對于 debug 測試來說,信息不全,比如說 觸發異常的具體位置在哪:

import traceback try:num= int('abc') except Exception:traceback.print_exc()# traceback.print_exc() 直接打印異常 # traceback.format_exc()返回字符串 # 還可以將信息寫入到文件 # traceback.print_exc(file=open('error.txt', 'a+'))

?

?

Python 標準庫異常

異常名稱描述
BaseException所有異常的基類
SystemExit解釋器請求退出
KeyboardInterrupt用戶中斷執行(通常是輸入^C)
Exception常規錯誤的基類
StopIteration迭代器沒有更多的值
GeneratorExit生成器(generator)發生異常來通知退出
StandardError所有的內建標準異常的基類
ArithmeticError所有數值計算錯誤的基類
FloatingPointError浮點計算錯誤
OverflowError數值運算超出最大限制
ZeroDivisionError除(或取模)零 (所有數據類型)
AssertionError斷言語句失敗
AttributeError對象沒有這個屬性
EOFError沒有內建輸入,到達EOF 標記
EnvironmentError操作系統錯誤的基類
IOError輸入/輸出操作失敗
OSError操作系統錯誤
WindowsError系統調用失敗
ImportError導入模塊/對象失敗
LookupError無效數據查詢的基類
IndexError序列中沒有此索引(index)
KeyError映射中沒有這個鍵
MemoryError內存溢出錯誤(對于Python 解釋器不是致命的)
NameError未聲明/初始化對象 (沒有屬性)
UnboundLocalError訪問未初始化的本地變量
ReferenceError弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
RuntimeError一般的運行時錯誤
NotImplementedError尚未實現的方法
SyntaxErrorPython 語法錯誤
IndentationError縮進錯誤
TabErrorTab 和空格混用
SystemError一般的解釋器系統錯誤
TypeError對類型無效的操作
ValueError傳入無效的參數
UnicodeErrorUnicode 相關的錯誤
UnicodeDecodeErrorUnicode 解碼時的錯誤
UnicodeEncodeErrorUnicode 編碼時錯誤
UnicodeTranslateErrorUnicode 轉換時錯誤
Warning警告的基類
DeprecationWarning關于被棄用的特征的警告
FutureWarning關于構造將來語義會有改變的警告
OverflowWarning舊的關于自動提升為長整型(long)的警告
PendingDeprecationWarning關于特性將會被廢棄的警告
RuntimeWarning可疑的運行時行為(runtime behavior)的警告
SyntaxWarning可疑的語法的警告
UserWarning用戶代碼生成的警告

?

異常,就是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。一般情況下,在 Python 無法正常處理程序時就會發生一個異常。

Python 中 try / except / else / finally 語句 的 完整格式如下所示:

try:# 正常執行的塊 except A:# A 異常的處理 except B:# B 異常的處理 except:# 其他 異常的處理 else:# 如果沒有異常,就執行 else 里面的代碼 finally:# 無論有沒有異常,finally 里面的代碼都執行print("finally")

說明:

  • 1. 程序正常執行時,是在 try 下面的 "正常執行的塊" ?中執行的,當在執行過程中如果發生了異常,則中斷當前在 "正常執行的塊" 中的執行,然后跳轉到對應的異常處理塊中開始執行;
  • 2. Python 從第一個 except X處開始查找,如果找到了對應的 exception 類型則進入其提供的 exception handle 中進行處理,如果沒有找到則直接進入 except 塊處進行處理。except 塊是可選項,如果沒有提供,該 exception 將會被提交給 Python 進行默認處理,處理方式則是終止應用程序并打印提示信息;
  • 3. 如果在 "正常執行的塊" 執行過程中沒有發生任何異常,則在執行完成后,會進入 else 執行塊中(如果存在的話)執行。
  • 4. 無論是否發生了異常,只要提供了 finally 語句,以上 try/except/else/finally 代碼塊執行的最后一步總是執行 finally 所對應的代碼塊。

注意:

  • 1. 在上面所示的完整語句中 try/except/else/finally 所出現的順序必須是 try ---> except X ---> except ---> else ---> finally,即所有的 except 必須在 else 和 finally 之前,else(如果有的話)必須在 finally 之前,而 except X 必須在 except 之前。否則會出現語法錯誤。
  • 2. 對于上面所展示的 try/except 完整格式而言,else 和 finally 都是可選的,而不是必須的,但是如果存在的話 else 必須在 finally 之前,finally(如果存在的話)必須在整個語句的最后位置。
  • 3. 在上面的完整語句中,else 語句的存在必須以 except X 或者 except 語句為前提,如果在沒有 except 語句的 try block 中使用 else 語句會引發語法錯誤。也就是說 else 不能與 try/finally 配合使用。
  • 4. except 的使用要非常小心,慎用。
class AError(Exception):"""AError---exception"""print('AError')try:#raise AErrorasdas('123') except AError:print("Get AError") except:print("exception") else:print("else") finally:print("finally") print("hello wolrd")

在上面的代碼中,Normal execution block 中出現了語法錯誤,但是由于使用了 except 語句,該語法錯誤就被掩蓋掉了。因此在使用 try/except 時最好還是要非常清楚的知道 Normal execution block 中有可能出現的異常類型以進行針對性的處理。

當你的程序中出現某些 異常的 狀況的時候,異常就發生了。例如,當你想要讀某個文件的時候,而那個文件不存在。或者在程序運行的時候,你不小心把它刪除了。上述這些情況可以使用異常來處理。假如你的程序中有一些無效的語句,會怎么樣呢?Python 會引發并告訴你那里有一個錯誤,從而處理這樣的情況。

?

當程序出現錯誤,python 會自動引發異常,也可以通過 raise 顯示地引發異常。

一旦執行了 raise 語句,raise 后面的語句將不能執行。

演示 raise 用法

try:s = Noneif s is None:print "s 是空對象"raise NameError #如果引發NameError異常,后面的代碼將不能執行print len(s) #這句不會執行,但是后面的except還是會走到 except TypeError:print "空對象沒有長度"s = None if s is None:raise NameError print 'is here?' #如果不使用try......except這種形式,那么直接拋出異常,不會執行到這里

?

觸發異常

我們可以使用 raise 語句自己觸發異常
raise語法格式:raise [Exception [, args [, traceback]]]
語句中 Exception 是異常的類型(例如,NameError)參數標準異常中任一種,args 是自已提供的異常參數。
最后一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象。

?

實例
一個異常可以是一個字符串,類或對象。
Python的內核提供的異常,大多數都是實例化的類,這是一個類的實例的參數。
定義一個異常非常簡單,如下所示:

def functionName( level ):if level < 1:raise Exception("Invalid level!", level)# 觸發異常后,后面的代碼就不會再執行

注意:為了能夠捕獲異常,"except"語句必須有用相同的異常來拋出類對象或者字符串

?

例如我們捕獲以上異常,"except" 語句如下所示:
try:
? ? 正常邏輯
except Exception,err:
? ? 觸發自定義異常? ??
else:
? ? 其余代碼

?

實例:

#!/usr/bin/python # -*- coding: UTF-8 -*- # 定義函數 def mye( level ):if level < 1:raise Exception,"Invalid level!"# 觸發異常后,后面的代碼就不會再執行 try:mye(0) # 觸發異常 except Exception,err:print 1,err else:print 2

執行以上代碼,輸出結果為:
$ python test.py?
1 Invalid level!

?

?

?

?

總結

以上是生活随笔為你收集整理的简明Python教程学习笔记_8_异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。