跳到内容

sys-exit-alias (PLR1722)

源自 Pylint 代码检查工具。

有时提供修复。

作用

检查 exit()quit() 的使用情况。

为什么这不好?

exitquit 来自 site 模块,该模块通常在启动时自动导入。但是,不能保证它会被导入,因此使用这些函数可能会导致运行时出现 NameError。一般来说,这些常量旨在交互式解释器中使用,而不是在程序中使用。

首选 sys.exit(),因为可以保证 sys 模块在所有上下文中都存在。

修复安全性

此修复总是不安全的。当用 sys.exit 替换 exitquit 时,行为可能会发生以下变化

  1. 如果代码在未导入 site 模块的环境中运行(例如,使用 python -S),则原始代码将引发 NameError,而修复后的代码将正常执行。

  2. site.exitsys.exit 处理元组参数的方式不同。site.exit 将元组视为常规对象,并始终返回退出代码 1,而 sys.exit 会解释元组内容以确定退出代码:一个空元组 () 会导致退出代码 0,而像 (2,) 这样的单元素元组使用该元素的值 (2) 作为退出代码。

示例

if __name__ == "__main__":
    exit()

建议改为

import sys

if __name__ == "__main__":
    sys.exit()

参考