python 異常處理

2022-03-19 15:01:42 字數 4826 閱讀 4856

python有兩種錯誤很容易辨認:語法錯誤和異常

語法錯誤

錯誤是指語法或者是邏輯上的。語法錯誤指示軟體的結構上的錯誤,導致不能被直譯器或者編譯器無正常解析或編譯

如:

>>> while

true:

...

print("a"

)...

break

file

"", line 3

break

^syntaxerror: invalid syntax

2.異常

異常是因程式 出現了錯誤而在正常控制流以外採取的行為。大多數的異常都不會被程式處理,都以錯誤資訊的形式展現

常見異常

nameerror  #嘗試訪問乙個未宣告的變數

zerodivisionerror  #除數為零

syntaxerror     #python直譯器語法錯誤

indexerror      #請求的索引超出序列範圍

keyerror        #請求乙個不存在的字典關鍵字

ioerror         #輸入/輸出錯誤

attributeerror #嘗試訪問未知的物件屬性

keyboardinterrupt  #使用者中斷執行(^c)

indentationerror  #縮排錯誤

typeerror  #對型別無效的操作

valueerror     #傳入無效的引數 

deprecationwarning #關於被棄用的特徵警告

arithmeticerror    #所有數值計算錯誤的基類

systemexit   #直譯器請求退出

importerror #匯入模組/物件失敗

memoryerror #記憶體溢位

異常可通過try語句來檢測,任何在try語句塊裡的**都會被監測,檢查有無異常發生

try語句主要有兩種形式:try-except 和 try-finally

乙個try語句可以對應乙個或者多個except子句,但只能對應乙個finally子句,或是乙個try-execpt-finally復合語句

可以使用try-except語句檢測和處理異常,也可以新增一人可選的else子句處理沒有探測到異常的執行**。

而try-finally只允許檢測異常並做出一些必要的清除工作(無論發生錯誤與否),沒有任何異常處理的設施 

try語句按照如下方式工作:

execpt基本語法

try

: do something

except

exception[,reason]:

suite_for_exception_exception

如:

inp = input("

num:")

try:

num =int(inp)

print

(num)

except

exception as e:

print("

轉換失敗

")

try except 語句還有乙個可選的else子句,如果使用這個子句,那麼必須放在所有的except子句之後.這個子句將在try子句沒有發生任何異常的時候執行。例如:

inp = input("

num:")

try:

num =int(inp)

print

(num)

except

exception as e:

print("

轉換失敗")

else

:

print("

成功")

帶有多個except的try語句

li =

inp = input("

num:")

try:

num =li[inp]

except

indexerror as i:

print

(i)except

exception as e:

print(e)

捕獲所有異常

exception

li =

inp = input("

num:")

try:

num =li[inp]

#exception捕獲所有異常

except

exception as e:

print(e)

主動觸發異常

#

主動觸發

try:

print("

123"

)

raise exception("

error...")

except

exception as e:

print(e)

使用者自定義異常

建立乙個新的exception類來擁有自己的異常。異常應該繼承自 exception 類,或者直接繼承,或者間接繼承

class

foo():

def__init__

(self,name):

self.name =name

def__str__

(self):

return

self.name

obj = foo("

test")

print(obj)

2 finally子句

finally子句是無論異常與否,是否捕捉到都會執行的一段**。語法結構

try

: a

except

: b

else

: c

finally

: d

無論異常發生在a,b,c最終都會執行d

3 try-finally語句

另一種使用finally的方式finally單獨和try連用,它和try-except區別在於它不是用來捕捉異常的

它常常用來給維護一致的行為而無論異常是否發生。finally**段都將被執行

def

change_pwd(username, password):

"""使用者修改密碼

:param username: 使用者名稱

:param password: 修改後的密碼

:return: true修改成功,false修改失敗

"""file_object = open('

log'

)

try:

lines=open('

log','r'

).readlines()

for i in

range(len(lines)):

if username in

lines[i]:

test=lines[i].split('

$')[1]

lines[i]=lines[i].replace(test,password)

open(

'log

','w

').writelines(lines)

return

true

return

false

finally

: file_object.close( )

1.raise語句

raise語句對所支援的引數十分靈活,對應到語法上就是支援許多不同的格式,raise一般用法是

raise [someexception,[, args [, traceback]]]
2.raise語句用法 

raise exclass  #觸發乙個異常,從exclass生成乙個例項(不含任何異常引數)、

raise exclass()  #通過函式呼叫操作符(function calloperator:())作用於類名亂乙個新的exclass例項,同樣沒有引數

raise exclass,args #同上,但同時提供異常引數args,可以是乙個引數也可以是乙個元組

raise exclass,instance  #通過例項觸發異常,如果 例項是exclass的子類例項,那麼新導演型別會是子類型別,如果 不是也會會是exclass子類,會複製生成新的exclass例項

try

: 正常邏輯

except

"invalid level!":

觸發自定義異常

else

: 其餘**

#

!/usr/bin/python

#-*- coding: utf-8 -*-

#定義函式

defmyexce( level ):

if level < 1:

raise exception("

invalid level!

", level)

#觸發異常後,後面的**就不會再執行

try:

myexec(0) //觸發異常

except

"invalid level!":

print 1

else

:

print 2

python異常處理 Python 異常處理

使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...

python異常舉例 Python異常處理

1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...

python異常處理

當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...