为什么Python的argparse使用2作为SystemExit的错误代码?

3 投票
1 回答
6303 浏览
提问于 2025-04-18 06:52

当我给Python的argparse输入一些它不喜欢的内容时,它会抛出一个SystemExit错误,错误代码是2。这个代码似乎表示“没有这样的文件或目录”。那么,为什么要使用这个错误代码呢?

import argparse
import errno

parser = argparse.ArgumentParser()
parser.add_argument('arg')

try:
    parser.parse_args([])
except SystemExit as se:
    print("Got error code {} which is {} in errno"
        .format(se.code, errno.errorcode[se.code]))

会产生这样的输出:

usage: se.py [-h] arg
se.py: error: too few arguments
Got error code 2 which is ENOENT in errno

1 个回答

13

你把C语言中的errno错误代码和一个程序的退出状态搞混了;这两个概念其实是完全不同的。

退出状态的值没有官方标准,但通常情况下,2代表的是使用不当;比如说,这是Bash内置命令使用的退出代码

os模块提供了一些os.EX_*常量,这些常量代表了许多POSIX系统中使用的sysexit.h常量。os.EX_USAGE是退出代码64,也可以使用,尽管argparse实际上并不使用这个常量,因为它只在UNIX系统上可用,而argparse需要在Windows和其他平台上也能工作。

撰写回答