报告此错误:TypeError:'Namespace'对象不可迭代
import argparse
def parse_args():
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-a', '--aa', action="store_true", default=False)
parser.add_argument('-b', action="store", dest="b")
parser.add_argument('-c', action="store", dest="c", type=int)
return parser.parse_args()
def main():
(options, args) = parse_args()
if __name__ == '__main__':
main()
答案 0 :(得分:10)
您的问题与此行有关:
(options, args) = parse_args()
这似乎是被弃用的“optparse”的成语。
使用没有“options”的argparse习语:
import argparse
parser = argparse.ArgumentParser(description='Do Stuff')
parser.add_argument('--verbosity')
args = parser.parse_args()
答案 1 :(得分:3)
尝试:
args = parse_args()
print args
结果:
$ python x.py -b B -aa
Namespace(aa=True, b='B', c=None)
答案 2 :(得分:1)
这与错误消息完全相同:parser.parse_args()
返回Namespace
对象,即not iterable
。只有可迭代的东西可以像options, args = ...
一样“解压缩”。
虽然我不知道你分别期待options
和args
的结果,但最终会像你的例子一样。
答案 3 :(得分:1)
错误在于不需要或不使用parse_argv选项,只传递argv。
Insted of:
(options, args) = parse_args()
你需要传递
args = parse_args()
其余的保持不变。 要调用任何方法,只需确保使用argv而不是选项。
例如:
a = argv.b