程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

小朋友學Python(19):異常

編輯:Python


一、什麼是異常

異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。
一般情況下,在Python無法正常處理程序時就會發生一個異常。
異常是Python對象,表示一個錯誤。
當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。

二、異常處理

捕捉異常可以使用try…except語句。
try…except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。
如果你不想在異常發生時結束你的程序,只需在try裡捕獲它。

語法:
以下為簡單的try….except…else的語法

try:

<語句> #運行別的代碼
except <名字>:
<語句> #如果在try部份引發了'name'異常
except <名字>,<數據>:
<語句> #如果引發了'name'異常,獲得附加的數據
else:
<語句> #如果沒有異常發生
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

try的工作原理是,當開始一個try語句後,python就在當前程序的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。

如果當try後的語句執行時發生異常,python就跳回到try並執行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。

如果在try後的語句裡發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,並打印缺省的出錯信息)。

如果在try子句執行時沒有發生異常,python將執行else語句後的語句(如果有else的話),然後控制流通過整個try語句。

例1

try:

fh = open("mytest", "w")
fh.write("This is a file to test exception!")
except IOError:
print "Error: No file found or read file error!"
else:
print "Write cotent to file succeed!"
fh.close()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

運行結果:

This is a file to

  • 1.

查看mytest文件中的內容:

This is a file to

  • 1.

例2

將mytest文件的寫權限去掉

chmod

  • 1.

再次執行test.py,結果為

Error:

Error: No file found or read file error!
  • 1.
  • 2.

三、使用except而不帶任何異常類型

你可以不帶任何異常類型使用except

try:

正常的操作
......................
except:
發生異常,執行這塊代碼
......................
else:
如果沒有異常執行這塊代碼
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

以上方式try…except語句捕獲所有發生的異常。但這不是一個很好的方式,我們不能通過該程序識別出具體的異常信息。因為它捕獲所有的異常。

四、try…except…finally語句

finally 中的代碼無論是否發生異常都將被執行

例3:除0異常

try:

1 / 0
except Exception as e:
print "0 can not be divided!"
else:
print "No exception!"
finally:
print "Anyway, statement in finally block will be executed!"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

運行結果:

0 can not be divided!

Anyway, statement in finally block will be
  • 1.
  • 2.

五、raise觸發異常

例4

#define function

def test_func( level ):
if level < 1:
raise Exception("Invalid level!", level)

try:
#invoke function
test_func(0)
except "any":
print 1
else:
print 2
finally:
print 3
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

運行結果:

3

Traceback (most recent call last):
File “test.py”, line 8, in <module>
test_func(0)
File “test.py”, line 4, in test_func
raise Exception(“Invalid level!”, level)
Exception: (‘Invalid level!’,0)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

從運行結果可以看出,raise拋出異常後,except和else中的語句都沒有被打印出來,但是finally中的語句被打印出來了。


更多內容請關注微信公眾號



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved