pythonraise異常
① python—raise異常捕獲
1、raise的作用:顯式的拋出異常。當出現異常時,raise後面的語句就不會執行
2、raise後面可以是一個class、也可以是一個對象
3、try...except...else
② python中用來拋出異常的關鍵字是
python中用來拋出異常的關鍵字是1.拋出異常和自定義異常 Python用異常對象(exception object)表
raise 語句 Python中的raise 關鍵字用於引發一個異常,基本上和C#和
自定義異常類型 Python中也可以自定義自己的特殊類型的異常,只需要要從Excepti
2.捕捉異常 和C#中的try/catch類似,Python中使用try/excep
③ python中的異常類的認識理解
9.8. 異常也是類
用戶自定義異常也可以是類。利用這個機制可以創建可擴展的異常體系。
以下是兩種新的,有效的(語義上的)異常拋出形式,使用 raise 語句:
raise Class
raise Instance
第一種形式中,Class 必須是 type 或其派生類的一個實例。第二種形式是以下形式的簡寫:
raise Class()
發生的異常其類型如果是 except 子句中列出的類,或者是其派生類,那麼它們就是相符的(反過來說--發生的異常其類型如果是異常子句中列出的類的基類,它們就不相符)。例如,以下代碼會按順序列印 B,C,D:
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except D:
print("D")
except C:
print("C")
except B:
print("B")
要注意的是如果異常子句的順序顛倒過來( execpt B 在最前),它就會列印 B,B,B--第一個匹配的異常被觸發。
列印一個異常類的錯誤信息時,先列印類名,然後是一個空格、一個冒號,然後使用內置函數 str() 將類轉換得到的完整字元串。
④ python拋出異常如何操作
8.4. 拋出異常
raise 語句允許程序員強制拋出一個指定的異常。例如:
>>> raise NameError('HiThere')
Traceback (most recent call last):
File "
", line 1, in ?
NameError: HiThere
要拋出的異常由 raise 的唯一參數標識。它必需是一個異常實例或異常類(繼承自 Exception 的類)。
如果你需要明確一個異常是否拋出,但不想處理它,raise 語句可以讓你很簡單的重新拋出該異常:
>>> try:
... raise NameError('HiThere')
... except NameError:
... print('An exception flew by!')
... raise
...
An exception flew by!
Traceback (most recent call last):
File "
", line 2, in ?
NameError: HiThere
⑤ python中的raise前的print列印沒有顯示
在 Python 中,raise 語句用於拋出一個異常。在 raise 語句之前的 print 語句會在拋出異常之前執行,如果你在使用 raise 語句時發現 print 語句沒有顯示,銷敬那麼可能是因為 raise 語句之後的代碼沒有被執行。局斗激
舉個例子,如果你有如下代碼:
def foo():
print("before raise")
raise Exception("error")
print("after raise")
foo()
那麼在執行 foo 函數時,會先列印 "before raise",然後拋出 Exception 異常,因此 "after raise" 不會被列印出來。
如果你希望在拋出異常之前列印出相應的信息,建議使用 try-except 語句來捕獲異常,在 except 塊中列印信息。這樣,就可以保證在拋出異常之前,所有的代碼都會被執行。
例如,可以使桐襪用如下代碼來捕獲異常:
def foo():
try:
print("before raise")
raise Exception("error")
print("after raise")
except Exception as e:
print("error:", e)
foo()
在這種情況下,執行 foo 函數時會先列印 "before raise",然後拋出 Exception 異常,最後列印 "error: error"。
⑥ pythonraise後會執行finally
Pythonraise語句用於引發異薯悄常,它可以拋出一個指定的異常對象,或者一個用陸握戶自定義的異常。如果raise語句後面跟著一個finally子句,那麼finally子句數悉渣將在異常被拋出後執行。
⑦ python里自己raise一個exception後,代碼還走不走except:
正常情況下,你的編輯器會提示你「系統識別錯誤」!
你的程序段中定義兩個「異常」。第一個「異常」是「mye(0)」里的「raise Exception("Invalid Level!",level)」,另一個是except語句,它們都存在一個共同的問題——類型不匹配。正確的格式應該是「raise」或「except」後接Exception型常量或對象。而你的程序段執行後,系統在引發「raise」異常後,由於無法找到對應Exception類型的介面,所以進入Suspend狀態,也可以叫「死循環」狀態。
下面幫你修改並測試成功了!自己感受一下:
def mye(level):
if level<1:
raise EOFError
try:
mye(2)
except EOFError:#"Invalid Level!"
print(1)
else:
print(2)
⑧ Python 異常處理總結
什麼是異常?
異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。一般情況下,在Python無法正常處理程序時就會發生一個異常。
異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
python提供了兩個非常重要的功能來處理python程序在運行中出現的異常和錯誤。你可以使用該功能來調試python程序。
異常處理: 本站Python教程會具體介紹。
斷言(Assertions):本站Python教程會具體介紹。
異常處理
捕捉異常可以使用try/except語句。try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。如果你不想在異常發生時結束你的程序,只需在try里捕獲它。
語法:
以下為簡單的try….except…else的語法:
try的工作原理是,當開始一個try語句後,python就在當前程序的上下文中作標記,這樣當異常出現時就可以回到這里,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。
· 如果當try後的語句執行時發生異常,python就跳回到try並執行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。
· 如果在try後的語句里發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,並列印預設的出錯信息)。
· 如果在try子句執行時沒有發生異常,python將執行else語句後的語句(如果有else的話),然後控制流通過整個try語句。
實例
下面是簡單的例子,它打開一個文件,在該文件中的內容寫入內容,且並未發生異常:
以上程序輸出結果:
實例
下面是簡單的例子,它打開一個文件,在該文件中的內容寫入內容,但文件沒有寫入許可權,發生了異常:
以上程序輸出結果:
使用except而不帶任何異常類型
你可以不帶任何異常類型使用except,如下實例:
以上方式try-except語句捕獲所有發生的異常。但這不是一個很好的方式,我們不能通過該程序識別出具體的異常信息。因為它捕獲所有的異常。
使用except而帶多種異常類型
你也可以使用相同的except語句來處理多個異常信息,如下所示:
try-finally 語句
try-finally 語句無論是否發生異常都將執行最後的代碼。
實例
如果打開的文件沒有可寫許可權,輸出如下所示:
同樣的例子也可以寫成如下方式:
當在try塊中拋出一個異常,立即執行finally塊代碼。finally塊中的所有語句執行後,異常被再次提出,並執行except塊代碼。參數的內容不同於異常。
異常的參數
一個異常可以帶上參數,可作為輸出的異常信息參數。你可以通過except語句來捕獲異常的參數,如下所示:
變數接收的異常值通常包含在異常的語句中。在元組的表單中變數可以接收一個或者多個值。
元組通常包含錯誤字元串,錯誤數字,錯誤位置。
實例
以下為單個異常的實例:
以上程序執行結果如下:
觸發異常
我們可以使用raise語句自己觸發異常
raise語法格式如下:
語句中Exception是異常的類型(例如,NameError)參數是一個異常參數值。該參數是可選的,如果不提供,異常的參數是」None」。
最後一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象。
實例
一個異常可以是一個字元串,類或對象。 Python的內核提供的異常,大多數都是實例化的類,這是一個類的實例的參數。
定義一個異常非常簡單,如下所示:
注意:為了能夠捕獲異常,」except」語句必須有用相同的異常來拋出類對象或者字元串。
例如我們捕獲以上異常,」except」語句如下所示:
用戶自定義異常
通過創建一個新的異常類,程序可以命名它們自己的異常。異常應該是典型的繼承自Exception類,通過直接或間接的方式。
以下為與RuntimeError相關的實例,實例中創建了一個類,基類為RuntimeError,用於在異常觸發時輸出更多的信息。
在try語句塊中,用戶自定義的異常後執行except塊語句,變數 e 是用於創建Networkerror類的實例。
在你定義以上類後,你可以觸發該異常,如下所示:
來源 | 腳本之家 原文鏈接:http://www.jb51.net/article/47996.htm
⑨ python raise觸發異常為什麼沒有列印錯誤
題主你好,
先說結果吧: 題主的代碼沒有問題, StopIteration異常也被拋出了.
下面說一下for循環從迭代器取值的邏輯題主應該就明白了:
正常情況下, for從迭代器中取值時, 在將迭代器中的元素消耗盡了以後, 迭代器都會拋出一個StopIteration異常給for語句, for語句檢測到StopIteration異常後就知道迭代器不會再返回內容了, 也就將for循環給結束掉了, 也就是說StopIteration是被for循環內部消耗掉了, 你可以這樣理解:
上面代碼的執行過程是這樣的:
將[1,2,3]中的1賦給x,輸出1;
將[1,2,3]中的2賦給x,輸出2;
將[1,2,3]國的3賦給x,輸出3;
拋出StopIteration異常, for檢測到StopIteration異常,結束for循環;
-------------
明白了上面的邏輯後, 題主也可以驗證一下, 題主可以將if語句給注釋掉, 然後執行一下, 看看輸出結果.
希望可以幫到題主, 歡迎追問.
有錯誤也請指出, 謝謝!
⑩ python raise 為什麼執行成功也有報錯信息
當程序出現錯誤,python會自動引發異常,也可以通過raise顯示地引發異脊告常襪皮。一旦執行了raise語句,raise後面的語句將不能執行。
raise Exception("拋出一個異常"),就是你自己要求的啦告野差。