python的異常處理

python的try語句有兩種風格
一:種是處理異常(try/except/else)
二:種是無論是否發生異常都將執行最后的代碼(try/finally)

try/except/else風格
try:
<語句> #運行別的代碼
except <名字>:
<語句> #如果在try部份引發了'name'異常
except <名字>,<數據>:
<語句> #如果引發了'name'異常,獲得附加的數據
else:
<語句> #如果沒有異常發生
try的工作原理是,當開始一個try語句后,python就在當前程序的上下文中作標記,這樣當異常出現時就可以回到這里,try子句先執行,接下來會發生什么依賴于執行時是否出現異常。
1、如果當try后的語句執行時發生異常,python就跳回到try并執行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。
2、如果在try后的語句里發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,并打印缺省的出錯信息)。
3、如果在try子句執行時沒有發生異常,python將執行else語句后的語句(如果有else的話),然后控制流通過整個try語句。

與Python異常相關的關鍵字:
關鍵字          關鍵字說明
raise           拋出/引發異常
try/except      捕獲異常并處理
pass            忽略異常
as              定義異常實例(except IOError as e)
finally         無論是否出現異常,都執行的代碼
else            如果try中的語句沒有引發異常,則執行else中的語句
except
   老版本的Python,except語句寫作"except Exception, e",Python 2.6后應寫作"except Exception as e"。
使用
except
而不帶任何異常類型:
try:

do something

except:

handle except

    會捕獲所有異常,包括鍵盤中斷和程序退出請求(用sys.exit()就無法退出程序了,因為異常被捕獲了),因此慎用。
使用
except Exception as e
可以捕獲除與程序退出sys.exit()相關之外的所有異常

?


try/finally風格
try:
<語句>
finally:
<語句> #退出try時總會執行

python總會執行finally子句,無論try子句執行時是否發一異常。
1、如果沒有發生異常,python運行try子句,然后是finally子句,然后繼續。
2、如果在try子句發生了異常,python就會回來執行finally子句,然后把異常遞交給上層try,控制流不會通過整個try語句。
當你想無論是否發生異常都確保執行某些代碼時,try/finally是有用的。

這個在打開文件的時候有用 finally總是在最后close()文件

try語句子句形式表
except: 捕獲所有異常
except name: 只捕獲特定的異常
except name,value: 捕獲異常和它的附加數據(將異常的信息保存到value,)
except (name1,name2): 捕獲任何列出的異常
else: 如果沒有異常
finally: 總是執行

>>> try:
f = open('file.txt')
except IOError, e:
print e
else:
print 'wrong'

[Errno 2] No such file or directory: 'file.txt'
最新的python版本 支持try/except/finally
try: 1:如果x沒有異常,執行z,i
x 2:如果x有異常, 一:如果except捕捉到異常則執行y,i
except(name): 二:沒捕捉到,執行i,然后返回內置異常處理
y
else:
z
finally:
i

但是,不知道"語句1至語句N"在執行會出什么樣的異常,還要做異常處理,且想把出現的異常打印出來,并不停止程序的運行,所以在"except ......"這句應怎樣來寫呢?
總結了一下至少3個方法:
方法一:捕獲所有異常
try:
a=b
b=c
except Exception,e:
print Exception,":",e
try:
a=b
b=c
except Exception,e:
print Exception,":",e
www.2cto.com
方法二:采用traceback模塊查看異常
import traceback
try:
a=b
b=c
except:
traceback.print_exc()
import traceback
try:
a=b
b=c
except:
traceback.print_exc()
方法三:采用sys模塊回溯最后的異常
import sys
try:
a=b
b=c
except:
info=sys.exc_info()
print info[0],":",info[1]
import sys
try:
a=b
b=c
except:
info=sys.exc_info()
print info[0],":",info[1]
但是,如果你還想把這些異常保存到一個日志文件中,來分析這些異常,那么請看下面的方法:
把 traceback.print_exc() 打印在屏幕上的信息保存到一個文本文件中
try:
a=b
b=c
except:
f=open("c:log.txt",'a')
traceback.print_exc(file=f)
f.flush()
f.close()

?

引發異常

你可以使用raise語句 引發 異常。你還得指明錯誤/異常的名稱和伴隨異常 觸發的 異常對象。你可以引發的錯誤或異常應該分別是一個ErrorException類的直接或間接導出類:

#!/usr/bin/python
# Filename: raising.py


class ShortInputException(Exception):
???'''A user-defined exception class.'''
?? def __init__(self, length, atleast):
?? Exception.__init__(self)
?? self.length = length
?? self.atleast = atleast


try:
?? s =
raw_input('Enter something --> ')
?? if len(s) < 3:
?? raise ShortInputException(
len(s), 3)
?? # Other work can continue as usual here
except EOFError:
?? print '\nWhy did you do an EOF on me?'
except ShortInputException, x:
?? print 'ShortInputException: The input was of length %d, \
?? was expecting at least %d'
% (x.length, x.atleast)
else:
?? print 'No exception was raised.'


如何工作:我們創建了異常類型(可以使用任何預定義的異常/錯誤),這個新的異常類型是ShortInputException類。它有兩個域——length是給定輸入的長度,atleast則是程序期望的最小長度。

except從句中,我們提供了錯誤類和用來表示錯誤/異常對象的變量。這與函數調用中的形參和實參概念類似。在這個特別的except從句中,我們使用異常對象的lengthatleast域來為用戶打印一個恰當的消息。

?

轉載于:https://www.cnblogs.com/cl1024cl/p/6205627.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259434.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決SQL單用戶模式不能轉為多用戶模式

數據庫CS 轉為單用戶模式后&#xff0c;卻不能訪問屬性&#xff0c;一直想不通&#xff0c;但畢竟是測試用的&#xff0c;也就沒放心上。網上找到段代碼可以恢復多用戶模式。卻還是不能解決不能訪問單用戶屬性的問題。USE master;GoDECLARE SQL VARCHAR(MAX);SET SQLSELECT SQL…

C++ stringstream介紹,使用方法與例子

C引入了ostringstream、istringstream、stringstream這三個類&#xff0c;要使用他們創建對象就必須包含sstream.h頭文件。   istringstream類用于執行C風格的串流的輸入操作。 ostringstream類用于執行C風格的串流的輸出操作。 strstream類同時可以支持C風格的串流的輸入…

xp下添加linux啟動,如何在windows xp系統下安裝linux???

我剛剛想開始學linux&#xff0c;請教如何安裝&#xff01;|我今天才安裝了Redhat 9.0。LINUX不可能在WINDOWS下安裝。比較簡單的方法是先在XP下用PQMAGIC分好區boot ext3 100M , / ext3 6G , swap 內存1&#xff0d;2倍詳細見www.linuxfans.org linux安裝說明最后&#xf…

linux rar安裝

描述&#xff1a;Linux默認自帶ZIP壓縮&#xff0c;最大支持4GB壓縮&#xff0c;RAR的壓縮比大于4GB. 流程&#xff1a;下載 》安裝 》 使用 -------------------------------------------------- 下載 # wget http://www.rarsoft.com/rar/rarlinux-x64-5.2.1b1.tar.gz--16:01:…

hoj 2739 中國郵局問題

1 /*若原圖的基圖不連通,2 或者存在某個點的入度或出度為 0 則無解。3 統計所有點的入度出度之差 Di, 對于 Di > 0 的點,4 加邊(s, i, Di, 0); 對于 Di < 0 的點加邊(i, t, -Di,0);5 對原圖中的每條邊(i, j),6 在網絡中加邊(i, j, ∞, Dij),Dij 為邊(i, j)的權值。7 求一…

R語言編程藝術(3)R語言編程基礎

本文對應《R語言編程藝術》 第7章&#xff1a;R語言編程結構&#xff1b; 第9章&#xff1a;面向對象的編程&#xff1b; 第13章&#xff1a;調試 R語言編程結構 控制語句&#xff1a; 循環&#xff1a; for (n in x) { } while (condition) { } repeat { }另外break也可以用在…

用C++流成員函數put輸出單個字符

轉載&#xff1a;http://c.biancheng.net/cpp/biancheng/view/254.html 在程序中一般用cout和插入運算符“<<”實現輸出&#xff0c;cout流在內存中有相應的緩沖區。有時用戶還有特殊的輸出要求&#xff0c;例如只輸出一個字符。ostream類除了提供上面介紹過的用于格式控…

linux 擴充db2表空間,如何擴充db2的表空間、加容器等表空間維護操作

db2 "alter tablespace GJDATA resize (FILE /backup/GJDATA32K45G)"db2 "alter tablespace GJIDX resize (FILE /backup/GJIDX32K45G)"容器路徑 db2 list tablespace containers for8容器大小 db2pd -d uibsch -tablespaces降低容器空間 resize 增加容器…

CheckBox控件

前臺代碼&#xff1a; 1 <asp:CheckBox ID"CheckBox1" runat"server" Text "蘋果"/> 2 <asp:CheckBox ID"CheckBox2" runat"server" Text "檸檬"/> 3 <asp:CheckBox ID"CheckBox3" runa…

.NET垃圾回收筆記

名詞 垃圾收集目標 ephemeral GC發生在Gen 0 和Gen 1 的垃圾收集 Full GC發生Gen 2 及以上的Gen與LOH的垃圾收集 垃圾收集模式 工作站模式GC直接發生在內存分配的線程&#xff08;也是當前的工作托管線程&#xff09;上 服務器模式每個CPU核都有一個自己獨立的GC線程與托管堆 垃…

go.js中的圖標(icons)的使用

2019獨角獸企業重金招聘Python工程師標準>>> 1、圖標庫下載&#xff1a; 將icons引入&#xff1a;http://gojs.net/latest/samples/icons.js 2、樣式演示 地址&#xff1a;http://gojs.net/latest/samples/icons.html 轉載于:https://my.oschina.net/u/2391658/blog…

Pygame - Python游戲編程入門(1)

前言 在上一篇中&#xff0c;我們初步熟悉了pygame的控制流程&#xff0c;但這對于一個游戲而言是遠遠不夠的。所以在這一篇中&#xff0c;我們的任務是添加一架飛機&#xff08;玩家&#xff09;&#xff0c;并且能夠控制它進行移動&#xff0c;這樣我們就又離目標進了一步了~…

C++字符輸入getchar()和字符輸出putchar()

轉載&#xff1a;http://c.biancheng.net/cpp/biancheng/view/117.html C還保留了C語言中用于輸入和輸出單個字符的函數&#xff0c;使用很方便。其中最常用的有getchar函數和putchar函數。 putchar函數(字符輸出函數) putchar函數的作用是向終端輸出一個字符。例如&#xf…

linux實現shell,linux

4.5Mhttp://www.starbase-929.net/media/Calibre%20Library/Ken%20O.%20Bartch/Linux%20Shell%20Scription%20With%20Bash%20(1778)/Linux%20Shell%20Scription%20With%20Bash%20-%20Ken%20O.%20Bartch.pdfstarbase-929.net全網免費4.0Mhttp://www.myaitcampus.net/elibrary/im…

AQS淺析

2019獨角獸企業重金招聘Python工程師標準>>> AQS的原理淺析 本文是《Java特種兵》的樣章&#xff0c;本書即將由工業出版社出版 AQS的全稱為&#xff08;AbstractQueuedSynchronizer&#xff09;&#xff0c;這個類也是在java.util.concurrent.locks下面。這個類似乎…

str045漏洞提權linux,Linux運維知識之CVE-2016-5195 Dirtycow: Linux內核提權漏洞

本文主要向大家介Linux運維知識之CVE-2016-5195 Dirtycow&#xff1a; Linux內核提權漏洞紹了&#xff0c;通過具體的內容向大家展現&#xff0c;希望對大家學習Linux運維知識有所幫助。CVE-2016-5195 Dirtycow&#xff1a; Linux內核提權漏洞以下都是github上找的源碼&#xf…

編程如寫作

昨晚似乎是個適合寫作的夜&#xff0c;不論是自己還是朋友&#xff0c;都比平常更容易被觸動。看著微博上朋友們的心路&#xff0c;想寫點什么卻似乎找不出非常值得大書特書的主題&#xff0c;只是歪坐在電腦旁&#xff0c;喝著咖啡&#xff0c;單曲循環著倉木麻衣的《time aft…

C++中cin、cin.get()、cin.getline()、getline()等函數的用法

轉載&#xff1a;http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html c輸入流函數主要以下幾個&#xff1a; 1、cin 2、cin.get() 3、cin.getline() 4、getline() 附:cin.ignore();cin.get()//跳過一個字符,例如不想要的回車,空格等字符 1、cin>>…

工作環境總結(1)開發環境搭建

1、安裝git 安裝文件&#xff1a;Git-2.12.0-64-bit.exe 下載地址&#xff1a;https://github.com/git-for-windows/git/releases/download/v2.12.0.windows.1/Git-2.12.0-64-bit.exe 在git bash中配置&#xff0c;git bash命令行中執行&#xff08;只有使用到egit時使用&…

c語言煙花百度云,C語言實現放煙花的程序

這是一個利用C語言編寫放煙花的程序(同時也可以播放音樂)&#xff0c;供大家參考&#xff0c;具體內容如下代碼如下#pragma once#include#include //圖形界面庫頭文件#include //計算圓形的軌跡坐標#include#include#include#include#pragma comment(lib,"winmm.lib"…