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

时间:2014-05-17 18:06:40

标签: python argparse errno

当我提供Python的argparse输入时,它并不喜欢,它会引发一个代码为2的SystemExit,seems to mean "No such file or directory"。为什么要使用此错误代码?

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 个答案:

答案 0 :(得分:9)

您将C errno error codes与流程exit status混淆;这两个概念完全不相关。

退出状态值have no official standard,但按惯例2,则表示使用不正确;例如,这是exit code used by Bash built-ins

os module公开os.EX_*常量,表示许多POSIX系统使用的sysexit.h常量。 os.EX_USAGE是退出代码64,也可以使用,虽然argparse实际上并不使用此常量,因为它仅在UNIX系统上可用,而argparse需要在Windows和其他工作上运行平台也是。