如何解决TypeError argparse python
我想用 argparse 给函数命名,但我收到错误:
...
我 = 函数(输入)
类型错误:“str”对象不可调用
我的代码部分:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('it',help="iterations",type = int)
parser.add_argument('fun',help="function name")
args = parser.parse_args()
for i in range(0,args.it):
run_experiment(args.fun)
解决方法
该函数与其名称不同。虽然您可能可以使用 globals
将名称映射到函数本身,但最好使用显式 dict
来限制可以访问哪些函数。
def foo():
...
def bar():
...
functions = {'foo': foo,'bar': bar}
try:
f = functions[args.fun]
except KeyError:
sys.exit(f"Unknown function {args.fun}")
for i in range(args.it):
run_experiment(f)
这有一个额外的好处,即允许您更改函数的名称,而无需更改用户用来访问它们的字符串。
,argparse 将输入视为“字符串”,因此它无法识别您的“函数”。当您手动提供它时,它被推断为函数调用而不是字符串。为了更好地解释它,argparse 将名为 func 的函数视为字符串类型的“func”,而如果您在程序中对其进行硬编码,它将被推断为函数本身。由于你想使用argparse,可以使用eval
来解决这个问题。示例:
def example():
print('Hello')
method = 'example'
call_method= eval(method)
call_method()
还有其他方式也提到了here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。