python - Python 3.9.1 argparse exit_on_error 在某些情况下不起作用
问题描述
我正在编写一个包含元命令的 REPL。元命令可以接受选项和参数,我正在尝试使用 argparse 来处理它们。因此,如果用户没有正确使用该命令,我不想完全退出程序。最多,我想打印一条使用消息并继续 REPL。这是我正在尝试的基本想法:
import argparse
p = argparse.ArgumentParser(exit_on_error=False)
p.add_argument('foo')
try:
p.parse_args([]) # I want to catch the case of a user not supplying a required positional arg
except argparse.ArgumentError:
print("error detected")
然而,运行上面的代码片段给了我这个(并在之后退出):
usage: test.py [-h] foo
test.py: error: the following arguments are required: foo
Python 3.9 文档是这样说的:
通常,当您将无效的参数列表传递给 an 的
parse_args()
方法时ArgumentParser
,它将退出并显示错误信息。如果用户想手动捕获错误,可以通过设置
exit_on_error
来启用该功能False
:
可能是我误解了“无效参数列表”的含义(以及文档中给出的示例某些作品),但我认为空参数列表将适用于这种情况。
我意识到还有其他方法可以处理这个问题(我已经成功测试了其中的一两个),但我只是想确保我没有遗漏exit_on_error
参数。也就是说,有没有人知道为什么这不起作用?
解决方案
该参数仅处理一类错误,即处理特定参数时引发的错误。所需参数的测试以不同方式处理,并且不会被此参数转移。我怀疑这是在 Python 错误/问题上提出的,但我并没有对此给予太多关注。更改 parser.error 或 parser.exit 方法适用于两类错误。
推荐阅读
- sql - 如何使用 VBA 和 SQL 从其他 Excel 中检索数据?
- flutter - 颤振检测导航器何时准备就绪
- java - BasicScrollBarUI 和 LAF 的问题
- python - 使用 Python 客户端调用任意 k8s api
- performance - 我可以在 F# 中与集合函数并行进行两次求和,或者通常优化整个事情
- django - 排除后查询集变大
- javascript - 如何将函数参数发送到 AsyncStorage?
- r - 让 rtools40 在 Parallels VM 中的 Windows 10 中的 Rstudio 1.2.5042 和 TERR (Tibco Engine R) 上工作
- php - 为什么 iconv 在 php:7.4-fpm-alpine docker 中返回空字符串
- xcode - SwiftUI 从后台计时器更新 Textlabel