Python 缺少的参数不显示已定义的错误消息
这是我的第一篇博文,请原谅我遗漏的信息或愚蠢的问题。因此,我尝试运行一个命令行python脚本(我在Windows机器中),将其传递2个参数,检查参数是否传递,如果没有,则显示特定于该参数的错误消息。我得到一个缺少参数的错误,但它没有显示我想要的消息(在函数中定义)。我不确定我是否没有正确地创建函数,或者是否遗漏了什么。我还想检查传递的参数是否为正确的字符串,而不是int,但这些参数似乎默认为字符串,因此检查它们是否为int也不起作用 有人能给我一个提示或给我指出正确的方向吗?我一直在网上搜索,但没有找到任何能回答这个问题的答案。我是python的新手,因此仍在学习如何正确阅读文档(似乎示例太少,我无法理解文档)。以下是我正在使用的代码:Python 缺少的参数不显示已定义的错误消息,python,Python,这是我的第一篇博文,请原谅我遗漏的信息或愚蠢的问题。因此,我尝试运行一个命令行python脚本(我在Windows机器中),将其传递2个参数,检查参数是否传递,如果没有,则显示特定于该参数的错误消息。我得到一个缺少参数的错误,但它没有显示我想要的消息(在函数中定义)。我不确定我是否没有正确地创建函数,或者是否遗漏了什么。我还想检查传递的参数是否为正确的字符串,而不是int,但这些参数似乎默认为字符串,因此检查它们是否为int也不起作用 有人能给我一个提示或给我指出正确的方向吗?我一直在网上搜索,
import argparse
#parser to create and grab args from CLI
parser = argparse.ArgumentParser()
parser.add_argument("-i", help="File path of original folder")
parser.add_argument("-o", help="File path of output folder")
args = parser.parse_args()
#check if args have been passed and display error if missing
def check_args(input_path,output_path):
if input_path == None:
print("Please input a valid folder path for original folder destination")
elif output_path == None:
print("Please input a valid folder path for output folder destination")
else:
return args
#grab first and sec argument
input_path = args.i
output_path = args.o
check_args(input_path, output_path)
输出:
Program>python JPGtoPNG_conv.py -i 3 -o
usage: JPGtoPNG_conv.py [-h] [-i I] [-o O]
JPGtoPNG_conv.py: error: argument -o: expected one argument
非常感谢你的帮助 下面的代码应该可以为您完成这项工作
import argparse
import sys
class MyParser(argparse.ArgumentParser):
def error(self, message):
sys.stderr.write('error: %s\n' % message)
self.print_help()
sys.exit(2)
parser = MyParser()
parser.add_argument("-i", help="File path of original folder", required=True)
parser.add_argument("-o", help="File path of output folder", required=True)
args = parser.parse_args()
# grab first and sec argument
input_path = args.i
output_path = args.o
`由于argparse停止流并引发异常,因此未调用check_args`。你不介意吗?你不需要这张支票
parse_args
本身阻止您将args.o
设置为您认为需要检查的值。您真正想要在check_args
内部进行的检查类似于os.path.exists(output_path)
。太棒了!!!非常感谢大家的评论。在大家的投入下,我找到了解决问题的方法,学到了很多。我真的很感激所有的帮助。OP正在使用这个选项;他们只是省略了必要的论点。