我將字典傳遞給將字典映射到類物件的類。當 dict 正確時,這會成功。但是,我希望類在出現問題時回傳None ,例如字典中的意外鍵。
在下面的 t_bf_obj 類代碼中,如果存在未知的 dict 鍵,則該類不回傳None,它回傳一個t_bf_obj物件。另一項觀察是,例外中的訊息列印為“t_bf_obj 中的例外”,因此我知道呼叫了例外。
class bf_exception(Exception):
pass
class t_bf_obj():
unit = None
index = None
U_c = None
def __init__(self,dict:dict):
try:
for k, v in dict.items():
if (k=='unit') : self.unit = str(v)
elif(k=='index') : self.index = int(v)
elif(k=='U_c') : self.U_c = np.array(v)
else:
raise bf_exception()
except bf_exception as e:
print('Exception in t_bf_obj')
return None
在主代碼中:
# convert dict to t_bf_obj
obj = t_bf_obj(d_dict)
print(type(obj)) # <------------returns t_bf_object type when unknown key is in dict
if(obj is None):
print('Error: ThreadedTCPRequestHandler, obj==None',type(obj))
return
uj5u.com熱心網友回復:
更好的方法是避免在有效的情況下首先實體化該類dict。您可以通過類方法完成此操作。
class t_bf_obj:
def __init__(self, unit: str, index: int, u_c: np.array):
self.unit = unit
self.index = index
self.U_c = u_c
@classmethod
def from_dict(cls, dict):
for k, v in dict.items():
if k == 'unit':
unit = str(v)
elif k == 'index':
index = int(v)
elif k == 'U_c':
u_c = np.array(v)
else:
raise bf_exception()
return cls(unit, index, u_c)
try:
obj = t_bf_obj.from_dict(d_dict)
except bf_exception:
# If we're here, obj is undefined; no object was returned
# by t_bf_obj.from_dict
print('Error: ThreadedTCPRequestHandler')
uj5u.com熱心網友回復:
我通過在類中添加一個錯誤引數解決了我的問題,該引數有助于在創建程序中跟蹤物件的健康狀態:
class t_bf_obj():
def __init__(self,dict:dict):
self.unit = None
self.index = None
self.U_c = None
self.init_err = 0
try:
for k, v in dict.items():
if (k=='unit') : self.unit = str(v)
elif(k=='index') : self.index = int(v)
elif(k=='U_c') : self.U_c = np.array(v)
else: self.init_err = 1
except:
print('Exception in t_bf_obj')
self.init_err = 1
return
在主程式中:
obj = t_bf_obj(d_dict)
if(obj is None or obj.init_err == 1):
print('Error: obj is None or obj.init_err = 1')
return
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512971.html
標籤:Python班级例外
