python3之異常處理,斷言和反射

2022-07-10 06:57:10 字數 3631 閱讀 1804

python在執行過程中,程式解釋機制會測試**,如檢測不通過則會丟擲異常。

try

: aa = 10bb = '10'

cc = aa +bb

except

exception as e:

print('

error:

',e)

#output輸出異常,數字不能與字元向加

error: unsupported operand type(s) for +: '

int'

and'

str'

try:

aa = 10

bb = '10'

cc = aa + bb

except typeerror as e:

print('錯誤資訊;',e)

python中的異常種類非常多,每個異常專門處理某個項的異常!

attributeerror     試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror 輸入/輸出異常;基本上是無法開啟檔案

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

nameerror 使用乙個還未被賦予物件的變數

syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror 傳入物件型別與要求的不符合

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

s1 = '

hello

'try

: int(s1)

except

keyerror as e:

print('

鍵錯誤'

)except

indexerror as e:

print('

索引錯誤')

except

typeerror as e:

print('

型別錯誤')

except

valueerror as e:

print('

值的型別錯誤')

except

exception as e:

print('

錯誤')

try:

#主**塊

pass

except

keyerror as e:

#異常時,執行該塊

pass

else:#

主**塊執行完,執行該塊

pass

finally: #

無論異常與否,最終執行該塊

pass

class

myexception(exception):

def__init__

(self, msg):

self.message =msg

def__str__

(self):

return

self.message

try:

raise myexception('

我的異常

') #

raise為主動觸發異常

except

myexception as e:

print('

>>>:

',e)

assert斷言是宣告其布林值必須為真的判定,如果發生異常就說明表達示為假。可以理解assert斷言語句為raise-if-not,用來測試表示式,其返回值為假,就會觸發異常。

assert 1 == 1

print('

---------------')

assert 1 == 2

#output,如果為真時不輸出資訊,如果為假時flase則直接丟擲異常

---------------traceback (most recent call last):

file

"z:/python_project/day18/ddd/yichang.py

", line 26, in

assert 1 == 2assertionerror

python中的反射功能是由以下四個內建函式提供:hasattr、getattr、setattr、delattr,改四個函式分別用於對物件內部執行:檢查是否含有某成員、獲取成員、設定成員、刪除成員。

class

a(object):

def__init__

(self):

self.name = '

python

'self.age = 18

deffunc(self):

return

self.age

obj1 =a()

#檢查物件是否含有成員

print(hasattr(obj1,'

age')) #

true

print(hasattr(obj1,'

func

')) #

true

#獲取物件成員

print(getattr(obj1,'

name

')) #

python

print(getattr(obj1,'

func

')) #

>

#設定物件成員

setattr(obj1,'

slary

',9999)

print(getattr(obj1,'

slary

')) #

9999

#刪除成員

delattr(obj1,'

slary')

print(hasattr(obj1,'

slary

')) #

false

class

a(object):

def__init__

(self):

self.name = '

python

'self.age = 18

deffunc(self):

print('

func:

',self.name)

return

self.age

obj1 =a()

#通過獲取物件的方法來執行物件方法

obj =a()

fun = getattr(obj,'

func')

fun()

Python3 異常處理

python3.5 異常處理 try用法 try except語句主要是用於處理程式正常執行過程中出現的一些異常情況 try finally語句則主要用於在無論是否發生異常情況,都需要執行一些清理工作的場合 完整語句中,else語句的存在必須以except x或者except語句為前提,也就是說el...

python3 異常處理

python中的異常捕獲 異常處理語句關鍵字有try except else finally,主要組合如下 1.不捕獲異常,不管是否異常仍要執行操作 finally 先執行finally中的語句,再丟擲異常。不捕獲異常,丟擲異常後,仍執行finally中的語句 try print 1 0 final...

Python3異常處理

在程式設計過程中為了增加友好性,在程式出現bug時一般不會直接將錯誤資訊展示給使用者,而是提供乙個友好的輸出提示。1.異常基礎 常用結構 try pass except exception,ex pass 其他結構 try 主 塊 pass except keyerror,e 異常時,執行該塊 pa...