我遇到了以下问题。我在我的类中有一个查看属性,它访问配置文件并且如果用户向配置文件添加垃圾信息则会引发ValueError异常。
我想编写一个方法来检查我的配置文件是否存在错误,因此我想逐个查看列表中的每个属性并尝试访问其值。因此,我不需要为每个属性复制try-except代码块。
我尝试了下面的代码,当创建列表时调用属性, 因此抛出异常超出了我的try块。 是否有优雅的解决方案?
为了创建一个mve,我将属性体替换为调用一个函数,该函数会创建一个随机的
我想编写一个方法来检查我的配置文件是否存在错误,因此我想逐个查看列表中的每个属性并尝试访问其值。因此,我不需要为每个属性复制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(self, property_name)
。 - Vincent Savardnum = getattr(self, "bar1")
等等...就可以解决问题。 - tdelaney[property_name for property_name, obj in self.__class__.__dict__.items() if isinstance(obj, property)]
。我会写一个答案。 - Vincent Savard