0

我想有一个建议,以便以更好的方式编写以下行...

# raise exception in case of backendport or frontendport are not valid
assert len([backend_port['backend']['bport'] for backend_port in self.backend if backend_port['backend']['bport'] == '0']) >= 0, 'backend port not valid: BPNVAL'
assert self.port == 0, 'frontend port not valid: FPNVAL'

我想知道在名为 backend 的字典中是否至少有 1 个端口定义为“0”,并以这种方式引发异常。

谢谢!

4

1 回答 1

4

让我们首先修复这个>=0错误,对于列表来说总是如此:

len([backend_port['backend']['bport'] for backend_port in self.backend
     if backend_port['backend']['bport'] == '0']) > 0

然后,跳过len调用:

[backend_port['backend']['bport'] for backend_port in self.backend
 if backend_port['backend']['bport'] == '0']

此列表推导是一个布尔表达式,当列表非空时为真。但整个列表是不必要的,而且any更清晰、更快捷:

any(backend_port['backend']['bport'] == '0' for backend_port in self.backend)
于 2013-08-13T09:37:53.690 回答