8 錯誤和異常

2021-10-02 19:39:41 字數 4301 閱讀 9671

語法錯誤也就是解析錯誤.

test.py:

while

true

print

("ss"

)

執行結果:

file "main.py", line 1

while true

^syntaxerror: invalid syntax

***repl closed***

當語法沒有錯誤後還會引發其他的錯誤, 例如除數是0的時候, 會丟擲zerodivisionerror錯誤, 當然還有很多別的錯誤.

test.py:

x =10/

0

執行結果:

traceback (most recent call last):

file "main.py", line 1, in x = 10 / 0

zerodivisionerror: division by zero

***repl closed***

使用try except語句來處理捕獲異常.

test.py:

try

: x =10/

0except zerodivisionerror:

print

("除數不能是0"

)

執行結果:

除數不能是0

***repl closed***

try except語句的執行邏輯.

首先先執行try其中的邏輯, 如果其中沒有錯誤則跳過except的部分;

如果try部分出現錯誤, 則不執行try的後續部分, 直接跳到except部分執行邏輯.

except 可以包括多個異常型別.

test.py:

try

: x =10/

0except

(zerodivisionerror, runtimeerror)

:print

("除數不能是0"

)

執行結果:

除數不能是0

***repl closed***

try except語句可以有多個except子句, 根據except先後順序優先匹配第乙個獲取到的異常.

test.py:

try

: x =10/

0except exception:

print

("exception"

)except zerodivisionerror:

print

("除數不能是0"

)

執行結果:

exception

***repl closed***

try except語句還有乙個else語句, 但是其必須放在所有的except後面, 其只會在不發生異常的時候執行.

test.py:

try

:print

("正常執行"

)except exception:

print

("發生錯誤了"

)else

:print

("沒有發生異常"

)

執行結果:

正常執行

沒有發生異常

except 可以在異常的後面指定乙個變數, 它的引數有二個, 儲存於異常的args中, 可以通過變數的args逐個獲取, 也可以使用__str__()或直接輸出來獲取.

test.py:

try

:raise exception(

"a",

"b")

except exception as e:

print

("arg1:, arg2:"

.format

(*e.args)

)print

(e.__str__())

print

(e)

執行結果:

arg1:a, arg2:b

('a', 'b')

('a', 'b')

使用raise語句可以手動丟擲指定的異常.

test.py:

try

:raise exception(

"a",

"b")

except exception as e:

print

(e)

執行結果:

('a', 'b')
raise可以丟擲異常的例項(如上)或異常類(派生自exception的異常類). 如果是異常類, 其將呼叫沒有引數的建構函式來隱式例項化.

test.py:

try

:raise valueerror

except valueerror as e:

print

("cause by valueerror"

)

執行結果:

cause by valueerror
可以在except中捕獲異常但是並不處理它, 使用raise可以在次將其丟擲去.

test.py:

try

:raise valueerror

except valueerror as e:

print

("cause by valueerror"

)raise

執行結果:

cause by valueerror

traceback (most recent call last):

file "/users/chenxiaowei/desktop/vscode-pythonworkspace/test.py", line 2, in raise valueerror

valueerror

python的異常型別有很多, 但是有時候我們還是需要定義自己的異常型別, 方便於處理異常的資訊等.

test.py:

class

error

(exception)

:pass

class

myerror

(error)

:def

__init__

(self, expression, message)

: self.expression = expression

self.message = message

try:

raise myerror(

"myerrror"

,"error"

)except myerror as e:

print

(e)

執行結果:

('myerrror', 'error')
try except語句之前有乙個else的可選項, 用於當沒有發生異常的時候執行, 現在還有乙個可選項,finally語句, 其作用為——無論如何最後執行它(即使break, continue, return), 一般finally語句用於釋放外部資源.

test.py:

try

:raise exception(

"a",

"b")

except exception as e:

print()

else

:print()

finally

:print

("i will do!"

)

執行結果:

i will do!

像之前使用的with語句用於開啟檔案, 其定義了當不需要使用的時候執行標準的清理草組, 無論改物件是執行成功或者失敗.

python官方文件 8錯誤和異常

這只是乙個簡要的個人回顧,慎看 錯誤和異常 1.語法錯誤 2.異常 在語法上正確,但執行時可能引發錯誤。常見exception zerodivisioneroor nameerror typeerror 3.異常處理 try catch else finally 沒有 獲到的異常會傳到上一級去han...

錯誤和異常

錯誤和異常 try 語句體except 異常型別 處理語句 except 異常型別 處理語句 或 try 語句體except 異常型別1,異常型別2 處理語句 except exception 所有異常 except 異常型別 as 名稱 print as else 沒有異常才會執行 最終要執行的內...

錯誤和異常

try except語句的語法格式為 try 可能會產生異常的 except 異常類物件1 當前except子句處理異常的 except 異常類物件2 當前except子句處理異常的 當except後面的異常類與出現的異常相對應時,就會執行對應except下面的 如果程式出現的異常不在except後...