CodeQL 文档

抛出元组

ID: py/raises-tuple
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - maintainability
Query suites:
   - python-security-and-quality.qls

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

在 Python 2 中,如果抛出元组,则除了第一个元素之外的所有元素都将被忽略,只有第一个元素会被抛出。如果第一个元素本身是一个元组,那么该元组的第一个元素会被使用,依此类推。这不太可能是预期的效果,很可能表明存在某种错误。

需要注意的是,raise Exception, message 中的异常 _不是_ 元组,而 ex = Exception, message; raise ex 中的异常 _是_ 元组。

在 Python 3 中,抛出元组是一个错误。

建议

鉴于除了第一个元素之外的所有元素都会被忽略,应该用元组的第一个元素替换元组,以提高代码的清晰度。如果元组的后续部分旨在形成消息,那么应该在创建异常时将它们作为参数传递。

示例

在下面的示例中,预期的错误消息被错误地用于形成元组。



def raise_tuple():
    ex = Exception, "Important diagnostic information"
    raise ex

这可以通过使用消息创建异常,或者在 raise 语句中使用消息来修复,如下所示。



def fixed_raise_tuple1():
    ex = Exception("Important diagnostic information")
    raise ex


def fixed_raise_tuple2():
    raise Exception, "Important diagnostic information"

参考

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