CodeQL 文档

__init__ 方法是一个生成器

ID: py/init-method-is-generator
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - reliability
   - correctness
Query suites:
   - python-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

类的 __init__ 方法用于初始化新对象,而不是创建它们。因此,它不应该返回任何值。在方法中包含 yield 表达式会将其变成生成器方法。调用它将返回一个生成器,从而导致运行时错误。

建议

__init__ 方法中存在 yield 表达式表明逻辑错误,因此无法建议一般性的修复方法。

示例

在本例中,__init__ 方法包含 yield 表达式。这在初始化器的上下文中不合理。

class InitIsGenerator(object):
    def __init__(self, i):
        yield i

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私