<p>如果<code>/fr</code>目录不存在,则错误消息是有意义的。你知道吗</p>
<p>如果您想要一个带有usage和exit的错误消息,请使用<code>parser.error(...)</code>,而不仅仅是引发异常。你知道吗</p>
<p>我已经简化了您的代码,部分是为了适应常见的argparse用法,但更重要的是要集中精力正确解析。因为我的语言是“恩”,所以我参加了那部分测试。在这一点上,测试特定目录是一种干扰。你知道吗</p>
<p>我认为您的主要问题是<code>type=directory</code>参数。这个参数应该是一个函数,它接受一个字符串并返回所需的内容。它没有指定您想要的对象类型。由于没有<code>directory(astr)</code>函数,这一步就失败了。你知道吗</p>
<pre><code>def parsing():
parser= ArgumentParser(prog='PROG')
parser.add_argument('-d'," dir", default= "/home", help= "Base directory")
parser.add_argument('-l'," loc", action= "store_true", help= "Takes into account locale")
namespace, other= parser.parse_known_args()
if namespace.loc:
l = 'fr'
namespace.loc= path.join(namespace.dir, l)
return namespace, other
</code></pre>
<p>各种测试包括:</p>
<pre><code>1139:~/mypy$ python3 stack29283397.py
Base directory: /home
Locale directory: False
1144:~/mypy$ python3 stack29283397.py -l
Base directory: /home
Locale directory: /home/fr
1144:~/mypy$ python3 stack29283397.py dir=/home/foo -l
Base directory: /home/foo
Locale directory: /home/foo/fr
</code></pre>
<p>将<code>loc</code>测试更改为:</p>
<pre><code>if namespace.loc:
l = 'fr'
namespace.loc= path.join(namespace.dir, l)
parser.error('%s directory not found'%namespace.loc)
</code></pre>
<p>产生:</p>
<pre><code>1145:~/mypy$ python3 stack29283397.py dir=/home/foo -l
usage: PROG [-h] [-d DIR] [-l]
PROG: error: /home/foo/fr directory not found
</code></pre>
<p>如果您想保留<code>type=directory</code>,那么您需要找到或编写具有该名称的函数,例如</p>
<pre><code>def directory(astring):
# do something to validate this string
# or transform it into something else
return astring
</code></pre>