摘要:如果有一個(gè)異常程序沒(méi)有處理,那么將調(diào)用默認(rèn)的處理器處理,并終止程序且給出提示。引發(fā)異常你可以用語(yǔ)句來(lái)引發(fā)一個(gè)異常。異常錯(cuò)誤對(duì)象必須有一個(gè)名字,且它們應(yīng)是或類(lèi)的子類(lèi)。參考資料凌風(fēng)技術(shù)站異常機(jī)制講解
當(dāng)你的程序中出現(xiàn)異常情況時(shí)就需要異常處理。比如當(dāng)你打開(kāi)一個(gè)不存在的文件時(shí)。當(dāng)你的程序中有一些無(wú)效的語(yǔ)句時(shí),Python會(huì)提示你有錯(cuò)誤存在。
下面是一個(gè)拼寫(xiě)錯(cuò)誤的例子,print寫(xiě)成了Print。Python是大小寫(xiě)敏感的,因此Python將引發(fā)一個(gè)錯(cuò)誤:
Print "Hello World" File "", line 1 Print "Hello World" ^ SyntaxError: invalid syntax >>> print "Hello World" Hello World
1、try...except語(yǔ)句
try...except語(yǔ)句可以用于捕捉并處理錯(cuò)誤。通常的語(yǔ)句放在try塊中,錯(cuò)誤處理語(yǔ)句放在except塊中。示例如下:
#!/usr/bin/python # Filename: try_except.py import sys try: s = raw_input("Enter something --> ") except EOFError:#處理EOFError類(lèi)型的異常 print "/nWhy did you do an EOF on me?" sys.exit() # 退出程序 except:#處理其它的異常 print "/nSome error/exception occurred." print "Done"
運(yùn)行輸出如下:
$ python try_except.py Enter something --> Why did you do an EOF on me? $ python try_except.py Enter something --> Python is exceptional! Done
說(shuō)明:每個(gè)try語(yǔ)句都必須有至少一個(gè)except語(yǔ)句。如果有一個(gè)異常程序沒(méi)有處理,那么Python將調(diào)用默認(rèn)的處理器處理,并終止程序且給出提示。
2、引發(fā)異常
你可以用raise語(yǔ)句來(lái)引發(fā)一個(gè)異常。異常/錯(cuò)誤對(duì)象必須有一個(gè)名字,且它們應(yīng)是Error或Exception類(lèi)的子類(lèi)。
下面是一個(gè)引發(fā)異常的例子:
#!/usr/bin/python #文件名: raising.py class ShortInputException(Exception): """你定義的異常類(lèi)。""" def __init__(self, length, atleast): Exception.__init__(self) self.length = length self.atleast = atleast try: s = raw_input("請(qǐng)輸入 --> ") if len(s) < 3: raise ShortInputException(len(s), 3) # raise引發(fā)一個(gè)你定義的異常 except EOFError: print "/n你輸入了一個(gè)結(jié)束標(biāo)記EOF" except ShortInputException, x:#x這個(gè)變量被綁定到了錯(cuò)誤的實(shí)例 print "ShortInputException: 輸入的長(zhǎng)度是 %d, / 長(zhǎng)度至少應(yīng)是 %d" % (x.length, x.atleast) else: print "沒(méi)有異常發(fā)生."
運(yùn)行輸出如下:
$ python raising.py 請(qǐng)輸入 --> 你輸入了一個(gè)結(jié)束標(biāo)記EOF $ python raising.py 請(qǐng)輸入 --> --> ab ShortInputException: 輸入的長(zhǎng)度是 2, 長(zhǎng)度至少應(yīng)是 3 $ python raising.py 請(qǐng)輸入 --> abc 沒(méi)有異常發(fā)生.
3、try...finally語(yǔ)句
當(dāng)你正在讀文件或還未關(guān)閉文件時(shí)發(fā)生了異常該怎么辦呢?你應(yīng)該使用try...finally語(yǔ)句以釋放資源。示例如下:
#!/usr/bin/python # Filename: finally.py import time try: f = file("poem.txt") while True: # 讀文件的一般方法 line = f.readline() if len(line) == 0: break time.sleep(2)#每隔兩秒輸出一行 print line, finally: f.close() print "Cleaning up...closed the file"
運(yùn)行輸出如下:
$ 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
說(shuō)明:我們?cè)趦擅脒@段時(shí)間內(nèi)按下了Ctrl-c,這將產(chǎn)生一個(gè)KeyboardInterrupt異常,我們并沒(méi)有處理這個(gè)異常,那么Python將調(diào)用默認(rèn)的處理器,并終止程序,在程序終止之前,finally塊中的語(yǔ)句將執(zhí)行。
參考資料:
CSDN
凌風(fēng)技術(shù)站pythoon異常機(jī)制講解
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44306.html
摘要:那些瑣碎的知識(shí)點(diǎn)作者記錄的的很奇特很難記的知識(shí)點(diǎn)。易錯(cuò)知識(shí)點(diǎn)整理注意和的區(qū)別中和都是輸出的作用,但是兩者之間還是有細(xì)微的差別。今天手頭不忙,總結(jié)一下,分享過(guò)程中掌握的知識(shí)點(diǎn)。 深入理解 PHP 之:Nginx 與 FPM 的工作機(jī)制 這篇文章從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。 PHP 那些瑣碎的知識(shí)...
摘要:起步的提供一系列和屬性訪問(wèn)有關(guān)的特殊方法。本文闡述它們的區(qū)別和用法。屬性的訪問(wèn)機(jī)制一般情況下,屬性訪問(wèn)的默認(rèn)行為是從對(duì)象的字典中獲取,并當(dāng)獲取不到時(shí)會(huì)沿著一定的查找鏈進(jìn)行查找。則這個(gè)類(lèi)的對(duì)象稱(chēng)為描述符。 起步 python的提供一系列和屬性訪問(wèn)有關(guān)的特殊方法:__get__, __getattr__, __getattribute__, __getitem__ 。本文闡述它們的區(qū)別和用...
摘要:在這里我分享下我個(gè)人入門(mén)機(jī)器學(xué)習(xí)的經(jīng)歷,希望能對(duì)大家能有所幫助。相關(guān)學(xué)習(xí)鏈接,,入門(mén)后的體驗(yàn)在入門(mén)了機(jī)器學(xué)習(xí)之后,在實(shí)際工作中,絕大多數(shù)的情況下你并不需要去創(chuàng)造一個(gè)新的算法。 機(jī)器學(xué)習(xí)在很多眼里就是香餑餑,因?yàn)闄C(jī)器學(xué)習(xí)相關(guān)的崗位在當(dāng)前市場(chǎng)待遇不錯(cuò),但同時(shí)機(jī)器學(xué)習(xí)在很多人面前又是一座大山,因?yàn)榘l(fā)現(xiàn)它太難學(xué)了。在這里我分享下我個(gè)人入門(mén)機(jī)器學(xué)習(xí)的經(jīng)歷,希望能對(duì)大家能有所幫助。 PS:這篇文章...
閱讀 1492·2021-11-24 11:16
閱讀 2697·2021-07-28 12:32
閱讀 2308·2019-08-30 11:22
閱讀 1445·2019-08-30 11:01
閱讀 604·2019-08-29 16:24
閱讀 3552·2019-08-29 12:52
閱讀 1632·2019-08-29 12:15
閱讀 1338·2019-08-29 11:18