Python学习笔记之异常
Python用異常對(duì)象來(lái)表示異常情況,如果異常對(duì)象未被處理或捕捉,程序就會(huì)回溯(traceback)中止執(zhí)行。
異常可以在出錯(cuò)時(shí)自動(dòng)引發(fā),也可以主動(dòng)引發(fā)。
異常被引發(fā)后如果不被處理就會(huì)傳播至程序調(diào)用的地方,直到主程序(全局作用域),如果主程序仍然沒(méi)有異常處理,程序會(huì)帶著棧跟蹤終止。
raise:引發(fā)異常
>>> raise Exception Traceback (most recent call last):File "<pyshell#1>", line 1, in <module>raise Exception Exception? >>> raise Exception("error!!!")
? Traceback (most recent call last):
? File "<pyshell#2>", line 1, in <module>
? raise Exception("error!!!")
? Exception: error!!!
常見(jiàn)內(nèi)建異常類:
| 類名 | 描述 |
| Exception | 所有異常的基類 |
| AttributeError | 特性引用或賦值失敗時(shí)引發(fā) |
| IOError | 試圖打開(kāi)不存在文件(包括其他情況)時(shí)引發(fā) |
| IndexError | 在使用序列中不存在的索引時(shí)引發(fā) |
| KeyError | 使用映射中不存在的鍵引發(fā) |
| NameError | 找不到名字(變量)時(shí)引發(fā) |
| SyntaxError | 在代碼為錯(cuò)誤形式時(shí)引發(fā) |
| TypeError | 在內(nèi)建操作或者函數(shù)應(yīng)用于錯(cuò)誤類型的對(duì)象引發(fā)? |
| ValueError | 在內(nèi)建操作或者函數(shù)應(yīng)用于正確的對(duì)象,但是該對(duì)象使用不合適的值引發(fā) |
| ZeroDivision | 在除法或者模除操作的第二個(gè)參數(shù)為0時(shí)引發(fā) |
?
自定義異常類:繼承自Exception
class DefException(Exception):pass?
捕捉異常:使用try/except語(yǔ)句實(shí)現(xiàn)>>> try:
x = int(input("The first num:"))y = int(input("The second num:"))print(x/y) except ZeroDivisionError:print("Error")The first num:5 The second num:0Error >>> try:x = int(input("The first num:"))y = int(input("The second num:"))print(x/y) except ZeroDivisionError:print("Error") except ValueError:print("TypeError")The first num:5 The second num:o TypeError
?
用一個(gè)塊捕捉多個(gè)異常:
>>> try:x = int(input("The first num:"))y = int(input("The second num:"))print(x/y) except (ZeroDivisionError,ValueError):print("Error")The first num:5 The second num:0 Error?
捕捉對(duì)象:
>>> try:x = int(input("The first num:"))y = int(input("The second num:"))print(x/y) except (ZeroDivisionError,ValueError) as e:print(e)The first num:5 The second num:0 division by zero?
捕捉所有異常:
try:x = int(input("The first num:"))y = int(input("The second num:"))print(x/y) except:print("some errors") The first num:5 The second num: some errors這種方式會(huì)捕捉用戶中止執(zhí)行的企圖,會(huì)隱藏所有程序員未想到并且未做好準(zhǔn)備的錯(cuò)誤。
?
對(duì)于異常情況進(jìn)行處理:
?
#在輸入不合法時(shí)循環(huán),直到合法值出現(xiàn)退出循環(huán) while True:try:x = int(input("The first num:"))y = int(input("The second num:"))print(x/y)except:print("Error")else:break#運(yùn)行結(jié)果 The first num:5 The second num:0 Error The first num:6 The second num:3 2.0?
?finally子句:用在可能的異常后進(jìn)行清理,不管是否有異常都要執(zhí)行。在同一個(gè)try語(yǔ)句中,不可以和except使用。
x = None try:x = 1/0 finally:print("cleaning")del x#結(jié)果 cleaning Traceback (most recent call last):File "input.py", line 4, in <module>x = 1/0 ZeroDivisionError: division by zero***Repl Closed***?
可以在一條語(yǔ)句中組合使用try,except,else,finally
try:x = 1/0else:print("done") finally:print("cleaning")#運(yùn)行結(jié)果 cleaning***Repl Closed***?
轉(zhuǎn)載于:https://www.cnblogs.com/HJhj/p/7423454.html
總結(jié)
以上是生活随笔為你收集整理的Python学习笔记之异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 浦发银行腾讯围棋联名信用卡怎么样?这些权
- 下一篇: 11. 临时表