我正在创建一个对象列表,如果在初始化时有任何不需要的数据,我想立即取消它们的初始化,然后转到下一个对象。在Python中有这样的最佳实践吗?
data = [good, bad]
theList = [myObject(some_data) for some_data in data]
# I'd like myObject to determine if it should create itself, after some data parsing.
我应该从__new__
返回任何内容吗?或者我只需要从myObject中分离出数据验证逻辑..?或..?
谢谢!
上下文:给定一个文件夹路径,我正在按顺序检查一堆东西(是否正确格式化了基本名称,如果是这样,是否存在某个文件,如果存在,则解析它...等等)
答案 0 :(得分:5)
与其他答案一样,在创建对象之前验证数据。有点像这样:
def validate(data):
if data_is_good: return True
else: return False
data = [good, bad]
theList = [myObject(some_data) for some_data in data if validate(some_data)]
答案 1 :(得分:2)
在将数据提供给对象构造函数之前,应检查/验证是否有正确的数据。如果数据无效,则应引发错误,例如raise ValueError
或您自己的自定义异常。只有在数据有效时才能创建对象。此外,您还可以从类对象的 init 方法中引发异常。
答案 2 :(得分:2)
您可以在“__init__
”课程中引发异常。但请注意,您不能再使用列表理解(这不是很大的损失)。
答案 3 :(得分:1)
您可以使用发电机。这将创建对象,无论数据是否有效,但是根据init期间设置的标志保留它。 例如,
data = [good, bad]
theList = [obj for obj in (MyObject(some_data) for some_data in data) if obj.data_is_valid]