2013-02-08 50 views
4

我正面臨着python 2.6.1 argparse 0.8的這個問題,我需要添加%d來幫助描述。如何將%d添加到argparse幫助文本

import argparse 
parser = argparse.ArgumentParser() 

parser.add_argument('--range', metavar='range', type=str, 
     help='generates a list of host from given range e.g. "host%d.example.com 1 224"') 

args = parser.parse_args() 

它拋出錯誤

$ ./args.py -h 
... 
python2.6/site-packages/argparse.py", line 458, in _expand_help 
    return action.help % params 
TypeError: %d format: a number is required, not dict 

這我能理解,所以我試圖逃跑%例如

parser.add_argument('--range', metavar='range', type=str, 
     help='generates a list of host from given range e.g. "host%%d.example.com 1 224"') 

但我仍然得到另一個錯誤

$ ./args.py -h 
... 
python2.6/site-packages/argparse.py", line 252, in format_help 
    help = self._root_section.format_help() % dict(prog=self._prog) 
TypeError: %d format: a number is required, not dict 

所以我不知道如何逃生%正確,這樣我可以在幫助輸出中看到%d

+1

您可能已經知道這一點。使用'%'轉義工作正常2.7 – bernie 2013-02-08 18:56:11

+1

@bernie您應該將其作爲答案發布。 – Bakuriu 2013-02-08 18:59:11

+0

更新您的argparse版本。 stdlib版本中的['%%'工程](http://ideone.com/g3mgRb)。 – jfs 2013-02-08 18:59:40

回答

1

由於argparse正在格式化字符串兩次,給出2個錯誤,解決辦法是雙重轉義%

parser.add_argument('--range', metavar='range', type=str, 
     help='generates a list of host from given range e.g. "host%%%%d.example.com 1 224"') 

這就是4 % s。

+0

謝謝,爲什麼它沒有發生在我身上:) – 2013-02-08 22:29:32

+0

它在非破壞的argparse版本上產生[「%% d」而不是「%d」](http://ideone.com/nerIkD)。 – jfs 2013-02-09 09:38:32

0

輕微的選擇,如果4 % s冒犯你的眼睛。

parser.add_argument('--range', metavar='range', type=str, 
     help=r'generates a list of host from given range e.g. "host%s.example.com 1 224"' % "%%d")