[英]Catch custom Exception that is raised by a function inside the 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 限制在循环的开头吗?
这取决于您是否认为arg
为None
是一个错误。
如果它是一个受支持的值,这意味着没有什么可做的,那么根据您的第一个解决方案检查它并返回是最有意义的。
如果它永远不应该是None
并且有人传递它是一个错误,那么就让异常发生。 或者,我个人的选择,检查它并在__init__
中抛出一个异常来说明调用者传递了一个无效的参数。 较早发生的异常(在无效的事情发生时)感觉比后来发生的要好,一旦发生了一堆其他事情并且更难弄清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.