这个简化的脚本足以导致问题......只需检查“-d”参数是否为有效目录,如果未提供则提供默认值......
#!/usr/bin/python
import os
import argparse
def valid(dir):
subdir = dir + '/Desktop'
if not os.path.exists(subdir):
raise argparse.ArgumentTypeError("%s is not a valid directory" % subdir)
return dir
parser = argparse.ArgumentParser(description="blah blah blah")
parser.add_argument('-d', '--directory', help='directory to check', default=os.getcwd(), type=valid)
args = parser.parse_args()
默认参数是什么并不重要,当我运行脚本时,它使用默认值,无论我在命令行上输入什么,并抛出一个未捕获的异常,如下所示:
Traceback (most recent call last):
File "./parsertest.py", line 15, in <module>
args = parser.parse_args()
File "/usr/lib/python2.7/argparse.py", line 1688, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "/usr/lib/python2.7/argparse.py", line 1710, in parse_known_args
default = self._get_value(action, default)
File "/usr/lib/python2.7/argparse.py", line 2239, in _get_value
raise ArgumentError(action, msg)
argparse.ArgumentError: argument -d/--directory: /home/users/jrice/Desktop/Desktop is not a valid directory
运行良好,我的意思是,当它应该处理 ArgumentTypeError 时,如果我执行以下操作,只需打印 msg:
- 删除 'default=' 参数
- 不要将 '/Desktop' 附加到 dir,所以 subdir = dir,或者只检查 dir 本身
- 从我的主目录运行脚本!?!?
详细说明:如果我执行上述任何操作,即使 '-d' 无效,一切都很好。这是输出,这就是我想要的。
>./Desktop/parsertest.py -d blah
usage: parsertest.py [-h] [-d DIRECTORY]
parsertest.py: error: argument -d/--directory: blah/Desktop is not a valid directory
为什么 os.getcwd() + '/Desktop' 应该有所不同?