亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python編程進(jìn)階之異常處理用法實(shí)例分析

 更新時(shí)間:2020年02月21日 12:30:28   作者:Nicoder  
這篇文章主要介紹了python編程進(jìn)階之異常處理用法,結(jié)合實(shí)例形式分析了python異常捕獲、處理相關(guān)語(yǔ)句、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了python異常處理用法。分享給大家供大家參考,具體如下:

之前用Java的時(shí)候,在容易出錯(cuò)的地方我們經(jīng)常使用try…catch或者try…catch…finally來(lái)捕捉和顯示異常,在python中很高興地發(fā)現(xiàn)它也有這樣的機(jī)制。

try..except

這個(gè)用于當(dāng)異常出現(xiàn)的時(shí)候,用except從句來(lái)處理異常,而不至于程序自動(dòng)退出。例如,在python里獲取用戶輸入時(shí),若用戶輸入文件結(jié)束符Ctrl-d,則會(huì)引發(fā)EOFError文件結(jié)束異常。我們使用try except來(lái)處理:

#!/usr/bin/python
# Filename: try_except.py
import sys
try:
  s = raw_input('Enter something --> ')
except EOFError:
  print '\nWhy did you do an EOF on me?'
  sys.exit() # exit the program
except:
  print '\nSome error/exception occurred.'
  # here, we are not exiting the program
print 'Done'

我們?cè)谶\(yùn)行程序的時(shí)候輸入Ctrl-d:

$ python try_except.py
Enter something -->
Why did you do an EOF on me?

$ python try_except.py
Enter something --> Python is exceptional!
Done

可以看到,當(dāng)遇到EOFERROR時(shí),程序執(zhí)行了except EOFError:中的內(nèi)容。若出現(xiàn)其他異常,則會(huì)執(zhí)行except:從句中的內(nèi)容。except后面還可以加else從句,如果沒(méi)有發(fā)生異常,則執(zhí)行else從句中的內(nèi)容。記住,首先,我們要導(dǎo)入sys模塊?。?/strong>

try.. catch

catch主要用于異常出現(xiàn)的時(shí)候抓取異常,方便顯示異常信息。但是我還沒(méi)有見(jiàn)別人用過(guò),找不到例子~所以是不推薦用嘛?誰(shuí)找到例子可以留言給我^.^

try.. finally

假如你在讀一個(gè)文件的時(shí)候,希望在無(wú)論異常發(fā)生與否的情況下都關(guān)閉文件,該怎么做呢?這可以使用finally塊來(lái)完成。注意,在一個(gè)try塊下,你可以同時(shí)使用except從句和finally塊。如果你要同時(shí)使用它們的話,需要把一個(gè)嵌入另外一個(gè)。舉個(gè)例子(還記得文件讀寫里的poem嘛):

#!/usr/bin/python
# Filename: finally.py
import time
try:
  f = file('poem.txt')
  while True: # our usual file-reading idiom
    line = f.readline()
    if len(line) == 0:
      break
    time.sleep(2)
    print line,
finally:
  f.close()
  print 'Cleaning up...closed the file'

輸出:

$ python finally.py
Programming is fun
When the work is done
Cleaning up...closed the file
Traceback (most recent call last):
  File "finally.py", line 12, in ?
    time.sleep(2)
KeyboardInterrupt

我們進(jìn)行通常的讀文件工作,但是我有意在每打印一行之前用time.sleep方法暫停2秒鐘。這樣做的原因是讓程序運(yùn)行得慢一些(Python由于其本質(zhì)通常運(yùn)行得很快)。在程序運(yùn)行的時(shí)候,按Ctrl-c中斷/取消程序。

我們可以觀察到KeyboardInterrupt異常被觸發(fā),程序退出。但是在程序退出之前,finally從句仍然被執(zhí)行,把文件關(guān)閉

用raise引發(fā)異常

我們可以使用raise語(yǔ)句 引發(fā) 異常,但要指明錯(cuò)誤/異常的名稱和伴隨異常 觸發(fā)的 異常對(duì)象。你可以引發(fā)的錯(cuò)誤或異常應(yīng)該分別是一個(gè)Error或Exception類的直接或間接子類。舉個(gè)例子:

#!/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.'

輸出:

$ python raising.py
Enter something -->
Why did you do an EOF on me?

$ python raising.py
Enter something --> ab
ShortInputException: The input was of length 2, was expecting at least 3

$ python raising.py
Enter something --> abc
No exception was raised.

這里,我們創(chuàng)建了我們自己的異常類型,其實(shí)我們可以使用任何預(yù)定義的異常/錯(cuò)誤。自己定義的異常類型是ShortInputException類。它有兩個(gè)域——length是給定輸入的長(zhǎng)度,atleast則是程序期望的最小長(zhǎng)度。

在except從句中,我們提供了錯(cuò)誤類和用來(lái)表示錯(cuò)誤/異常對(duì)象的變量。這與函數(shù)調(diào)用中的形參和實(shí)參概念類似。當(dāng)觸發(fā)raise從句時(shí),會(huì)調(diào)用對(duì)應(yīng)的except從句執(zhí)行,在這個(gè)例子中就引發(fā)了except ShortInputException,x 這個(gè)錯(cuò)誤,類似于調(diào)用。

更多Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python入門與進(jìn)階經(jīng)典教程》、《Python字符串操作技巧匯總》、《Python列表(list)操作技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論