抛出元组¶
ID: py/raises-tuple
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- maintainability
Query suites:
- python-security-and-quality.qls
在 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"