我得到以下问题。 我有一个视图属性在我的班级访问一个配置,并可以引发ValueError
如果用户添加垃圾到配置。通过属性列表循环
我想写一个方法来检查我的配置文件的错误,所以我想我通过列表中的每个属性,并尝试访问它的价值。因此,我不需要为每个属性都复制try-except
。
我尝试了下面的代码,当然在创建列表时会调用属性,因此会在我的try之外引发错误。
有没有一个优雅的解决我的问题?
import random
def load_config():
rand_number = random.randint(0, 9)
if rand_number == 5:
raise ValueError
return rand_number
class foo:
@property
def bar1(self):
return load_config()
@property
def bar2(self):
return load_config()
@property
def bar3(self):
return load_config()
@property
def bar4(self):
return load_config()
@property
def bar5(self):
return load_config()
def check_properties(self):
properties = [
self.bar1, //Exceptions are thrown here
self.bar2,
self.bar3,
self.bar4,
self.bar5,
]
for property in properties:
try:
num = property
except ValueError:
print("ValueError at " + property.__name__)
my_foo = foo()
my_foo.check_properties()
若要使MVE我更换了财产机构提供的函数的调用与创建一个随机ValueError
你可以存储的名称,并使用'GETATTR(个体经营,PROPERTY_NAME)'代替。 –
@karthikr:这很正常。我认为你没有正确地阅读这个问题。 –
@VincentSavard如何提取一个属性的名称? __name__似乎不适用于属性 – Altoyyr