Argument的名称遮蔽了Python argparse模块中的关键字。

huangapple go评论62阅读模式
英文:

Argument's name shadows keyword in module argparse python

问题

当我尝试使用 argparse.ArgumentParser.parse_args() 中的标志 "--from" 获取参数时,出现错误。IDE 表示 "from" 是一个导入语句,代码是无法执行的:

parser = argparse.ArgumentParser(prog='cache_wiki.py',
                                     description='Find shortest path between links')
parser.add_argument('--from', required=True, help='page to start search with')
args = parser.parse_args()
print(args.from)

使用其他名称是可以的:

parser = argparse.ArgumentParser(prog='cache_wiki.py',
                                     description='Find shortest path between links')
parser.add_argument('--f', required=True, help='page to start search with')
args = parser.parse_args()
print(args.f)

但我真的需要使用标志 "--from"。

英文:

When I try to get argument with flag "--from" from argparse.ArgumentParser.parse_args() an error occurs. IDE says that "from" is import statement and the code is unreachable:

parser = argparse.ArgumentParser(prog='cache_wiki.py',
                                     description='Find shortest path between links')
parser.add_argument('--from', required=True, help='page to start search with')
args = parser.parse_args()
print(args.from)

It is ok with another name:

parser = argparse.ArgumentParser(prog='cache_wiki.py',
                                     description='Find shortest path between links')
parser.add_argument('--f', required=True, help='page to start search with')
args = parser.parse_args()
print(args.f)

but I really need to use flag "--from".

答案1

得分: 3

只要忽略IDE即可。确实,你不能使用 args.from,但这只是一个语法限制。你仍然可以通过例如 getattr(args, 'from') 来访问属性。

你还可以覆盖默认的目标名称,这样你就可以使用选项 --from,但设置一个不同的属性:

...
parser.add_argument('--from',
                    required=True,
                    dest='from_',
                    help='page to start search with')

args = p.parse_args(['--from', 'foo'])
assert args.from_ == 'foo'
英文:

I would ignore the IDE here. True, you cannot use args.from, but that's just a syntactic limitation. You can still access the attribute using, for example, getattr(args, 'from').

You can also override the default destination name so that you can use the option --from, but set a different attribute:

...
parser.add_argument('--from',
                    required=True,
                    dest='from_',
                    help='page to start search with')

args = p.parse_args(['--from', 'foo'])
assert args.from_ == 'foo'

huangapple
  • 本文由 发表于 2023年2月6日 02:44:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/75354672.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定