Python:在初始化期间取消对象创建

时间:2014-07-10 20:22:09

标签: python

我正在创建一个对象列表,如果在初始化时有任何不需要的数据,我想立即取消它们的初始化,然后转到下一个对象。在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中分离出数据验证逻辑..?或..?

谢谢!

上下文:给定一个文件夹路径,我正在按顺序检查一堆东西(是否正确格式化了基本名称,如果是这样,是否存在某个文件,如果存在,则解析它...等等)

4 个答案:

答案 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]