2013-09-29 52 views
2

其中報告這個錯誤:類型錯誤: '命名空間' 對象不是可迭代蟒蛇的argparse錯誤

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() 
+4

之前打開你應該至少通過[文檔]脫脂中心(http://docs.python.org/dev/library/argparse.html)的模塊的/包。特別是用法的* first * [示例](http://docs.python.org/dev/library/argparse.html#example)清楚地表明您應該執行'args = parser.parse_args()'而不是'選項,args = parser.parse_args()'就像你對舊模塊做的那樣。 – Bakuriu

回答

2

嘗試:

args = parse_args() 
print args 

結果:

$ python x.py -b B -aa 
Namespace(aa=True, b='B', c=None) 
1

這是完全一樣的錯誤消息說:parser.parse_args()返回Namespace對象,它是not iterable。只有迭代的東西可以像'解包'一樣,如options, args = ...

雖然我不知道你期望optionsargs分別最終結果如你的例子。

6

您的問題是否與此線做:

(options, args) = parse_args() 

這似乎是從過時的「optparse」一個成語。

使用argparse成語沒有「選擇」:

import argparse 
parser = argparse.ArgumentParser(description='Do Stuff') 
parser.add_argument('--verbosity') 
args = parser.parse_args() 
1

的錯誤是在parse_argv選項是不需要或不使用,只argv的傳遞。的

insted的:

(options, args) = parse_args() 

你需要傳遞

args = parse_args() 

而其他部分保持不變。 對於調用任何方法只是確保使用argv而不是選項。

例如:

a = argv.b