繁体   English   中英

python 中的 try-block 内的循环头

[英]Loop head inside try-block in python

我定义了一个这样的迭代:

class MyClass:
    
    def __init__(self, arg):
        self.arg = arg
        
    def __iter__(self):       
        for item in self.arg:
            yield item

不幸的是arg可能是None 我想知道如何在风格上抓住这一点。 我可以:

def __iter__(self):
    if self.arg is None:
        return
    for item in self.arg:
        yield item

但这不符合python的EAFP风格。 也许这样:

def __iter__(self):
    try:
        for item in self.arg:
            yield item
    except TypeError:
        return

但这对我来说似乎很危险。 实际上,我的循环涉及更多,我不希望任何其他 TypeErrors 被忽视。 我可以将 try-block 限制在循环的开头吗?

这取决于您是否认为argNone是一个错误。

如果它是一个受支持的值,这意味着没有什么可做的,那么根据您的第一个解决方案检查它并返回是最有意义的。

如果它永远不应该是None并且有人传递它是一个错误,那么就让异常发生。 或者,我个人的选择,检查它并在__init__中抛出一个异常来说明调用者传递了一个无效的参数。 较早发生的异常(在无效的事情发生时)感觉比后来发生的要好,一旦发生了一堆其他事情并且更难弄清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM