为什么Python的argparse使用2作为SystemExit的错误代码?
当我给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和其他平台上也能工作。