CodeQL 文档

在函数外部使用 ‘return’ 或 ‘yield’

ID: py/return-or-yield-outside-function
Kind: problem
Security severity: 
Severity: error
Precision: medium
Tags:
   - reliability
   - correctness
Query suites:
   - python-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

在 Python 中,returnyield 语句以及 yield from 表达式只能在函数中使用。在函数或类方法之外使用它们会导致在运行时出现 SyntaxError

建议

在函数或类方法之外使用这些元素通常表示逻辑错误。因此,无法提出通用的修复建议。

示例

在这个例子中,return 语句在类中的类方法之外使用,而 yield 语句在模块作用域中在函数之外使用,这会导致在运行这段代码时出现 SyntaxError。在这个例子中,可以通过将 return 语句放在类方法中,或将类重构为函数来修正无效的类。无效的 yield 语句可以成为包含 for 循环的新生成器函数的一部分。

# invalid class with return outside a function
class InvalidClass1(object):
    if [1, 2, 3]:
        return "Exists"

# invalid statement with yield outside a function
for i in [1, 2, 3]:
    yield i

参考资料

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