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__
里什么都不返回?还是说我需要把数据验证的逻辑和我的对象分开处理呢?或者还有其他方法吗?
谢谢!
背景:给定一个文件夹路径,我会依次检查一些东西(比如文件名格式是否正确,如果正确的话,某个文件是否存在,如果存在的话,再解析它……等等)
4 个回答
1
在把数据传给你的对象构造器之前,你应该先检查一下这些数据是否正确。如果数据不对,你就应该报错,比如用 raise ValueError
或者你自己定义的错误。只有当数据是有效的,才能继续创建对象。此外,你也可以在你类的 init 方法里抛出这个错误。
2
你可以在类的 __init__
方法里面抛出一个异常。不过要注意,这样的话你就不能再使用列表推导式了(不过这也不是太大的损失)。
4
就像其他回答说的那样,在创建对象之前要先验证数据。可以这样做:
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
你可以使用生成器。这种方法会创建一个对象,不管数据是否有效,但会根据在初始化时设置的标志来决定是否保留这个对象。
data = [good, bad]
theList = [obj for obj in (MyObject(some_data) for some_data in data) if obj.data_is_valid]