3

我正在尝试从 argparse 获取一串数字。是否提供参数 -n 是可选的。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-n', nargs=1) # -n is optional but must come with one and only one argument
args = parser.parse_args()
test = args.n
if test != 'None':
    print("hi " + test) 

当我不提供“-n 参数”时,程序会失败,但在我提供时可以正常工作。

Traceback (most recent call last):
  File "parse_args_test.py", line 7, in <module>
    print("hi " + test) 
TypeError: Can't convert 'NoneType' object to str implicitly

我怎样才能解决这个问题?

4

3 回答 3

2

不要尝试连接Noneand "hi "

print("hi", test)

或者

print("hi " + (test or ''))

或测试是否test明确设置为无:

if test is not None:
    print("hi", test)
于 2013-03-13T19:07:52.347 回答
1

与无比较时使用“是”。应该是这样的:

if test is not None:
    print("hi %s" % test) 
于 2013-03-13T19:09:31.100 回答
0

关于标题的问题,什么时候nargs使用,返回值args.n是一个列表(即使nargs=1使用了)。因此,当只需要 1 个参数时,您可能决定根本不使用nargs以避免返回列表。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-n')
args = parser.parse_args()
test = args.n
if test:
    print("hi " + test) 
于 2021-12-15T09:35:05.853 回答