Python 程序和所有开关运行良好,但argparse'--帮助';抛出很多错误

Python 程序和所有开关运行良好,但argparse'--帮助';抛出很多错误,python,debugging,argparse,Python,Debugging,Argparse,我在Python中使用argparse来处理程序中的参数。例如,如下图所示,如果我使用参数'-p',则执行一个特定的模块。现在,所有参数和程序运行良好。但当我试图为我的程序获取“--help”时,它崩溃得很厉害(图) 以下是与argparse相关的代码: parser = argparse.ArgumentParser(description="something1.") parser.add_argument('-x', '--xoo', help='something2', action='

我在Python中使用argparse来处理程序中的参数。例如,如下图所示,如果我使用参数'-p',则执行一个特定的模块。现在,所有参数和程序运行良好。但当我试图为我的程序获取“--help”时,它崩溃得很厉害(图)

以下是与argparse相关的代码:

parser = argparse.ArgumentParser(description="something1.")
parser.add_argument('-x', '--xoo', help='something2', action='store_true')
parser.add_argument('-a', '--al', help='something3', action='store_true')
parser.add_argument('-c', '--conv', help='something4', type=float)
parser.add_argument('-p', '--pay', help='something5', type=float)
args = parser.parse_args()
关于如何纠正这个错误,有什么想法吗

$ ./xoom.py -h
Traceback (most recent call last):
  File "./xoom.py", line 46, in <module>
    args = parser.parse_args()
  File "/usr/lib/python2.7/argparse.py", line 1688, in parse_args
    args, argv = self.parse_known_args(args, namespace)
  File "/usr/lib/python2.7/argparse.py", line 1723, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "/usr/lib/python2.7/argparse.py", line 1929, in _parse_known_args
    start_index = consume_optional(start_index)
  File "/usr/lib/python2.7/argparse.py", line 1869, in consume_optional
    take_action(action, args, option_string)
  File "/usr/lib/python2.7/argparse.py", line 1797, in take_action
    action(self, namespace, argument_values, option_string)
  File "/usr/lib/python2.7/argparse.py", line 994, in __call__
    parser.print_help()
  File "/usr/lib/python2.7/argparse.py", line 2319, in print_help
    self._print_message(self.format_help(), file)
  File "/usr/lib/python2.7/argparse.py", line 2293, in format_help
    return formatter.format_help()
  File "/usr/lib/python2.7/argparse.py", line 279, in format_help
    help = self._root_section.format_help()
  File "/usr/lib/python2.7/argparse.py", line 209, in format_help
    func(*args)
  File "/usr/lib/python2.7/argparse.py", line 209, in format_help
    func(*args)
  File "/usr/lib/python2.7/argparse.py", line 515, in _format_action
    help_text = self._expand_help(action)
  File "/usr/lib/python2.7/argparse.py", line 601, in _expand_help
    return self._get_help_string(action) % params
TypeError: float argument required, not dict
$./xoom.py-h
回溯(最近一次呼叫最后一次):
文件“/xoom.py”,第46行,在
args=parser.parse_args()
parse_args中的文件“/usr/lib/python2.7/argparse.py”,第1688行
args,argv=self.parse\u known\u args(args,名称空间)
parse_known_args中的文件“/usr/lib/python2.7/argparse.py”,第1723行
名称空间,args=self.\u解析\u已知\u args(args,名称空间)
文件“/usr/lib/python2.7/argparse.py”,第1929行,在已知参数中
开始索引=消耗索引可选(开始索引)
文件“/usr/lib/python2.7/argparse.py”,第1869行,可选
执行操作(操作、参数、选项字符串)
文件“/usr/lib/python2.7/argparse.py”,第1797行,在take_action中
操作(自身、名称空间、参数值、选项字符串)
文件“/usr/lib/python2.7/argparse.py”,第994行,在调用中__
parser.print_help()
文件“/usr/lib/python2.7/argparse.py”,第2319行,在打印帮助中
self.\u打印消息(self.format\u help(),文件)
文件“/usr/lib/python2.7/argparse.py”,第2293行,格式为“帮助”
返回格式化程序。格式化\u帮助()
文件“/usr/lib/python2.7/argparse.py”,第279行,格式为“帮助”
help=self.\u root\u section.format\u help()
文件“/usr/lib/python2.7/argparse.py”,第209行,格式为“帮助”
func(*args)
文件“/usr/lib/python2.7/argparse.py”,第209行,格式为“帮助”
func(*args)
文件“/usr/lib/python2.7/argparse.py”,第515行,格式为
help\u text=self.\u展开\u帮助(操作)
文件“/usr/lib/python2.7/argparse.py”,第601行,在“展开”帮助中
返回self.\u获取\u帮助\u字符串(操作)%params
TypeError:需要浮点参数,而不是dict

问题是您的
something4
和/或
something5
中有%个字符

删除它们,然后查看是否仍然出现错误

如果这些帮助文本中确实需要%个字符,请尝试将它们替换为%%——即在一行中使用2%的字符

更新:下面是一个简单的示例,演示了出现错误的原因:

import argparse

parser = argparse.ArgumentParser(description="something1.")
parser.add_argument('-c', '--conv', help='somet%fhing4', type=float)
args = parser.parse_args()

使用
--help
运行以生成错误消息。请注意帮助字符串中的%字符。

我无法复制。将
import argparse
添加到该代码的顶部,并使用
-h
标志运行它,我会得到一个普通的帮助菜单,而不是您的错误。请发布您的错误文本以便于搜索。图像没有索引。@Kevin我添加了一个函数定义,它涉及从字符串到浮点的类型转换。这可能与错误有关。请参阅。@MattDMo没有添加错误消息的文本以避免混乱。不管怎样,现在添加了它。抱歉@intellikid,即使有了这个更大的代码示例,我也得到了与以前相同的输出。看起来一切正常。您是指
elif args.conv
eliv args.pay
块中的百分比字符吗?但是这些字符将在各自的
打印
行上被
金额
替换。如果删除这些百分比,您将得到
TypeError:并非所有参数都在字符串格式化过程中转换。我的意思是OP的字符串
something4
something5
实际上包含%-个字符,这些字符导致了问题。问题是,在对其中一个argparse agroments的描述中,我写道“…在扣除P的5%费用后”。。该错误是由该%符号引起的。我删除了它,错误消失了。谢谢你的帮助@用户5402哈!是的。即使我在网上发布代码时修改了描述,您也知道这个问题,这真是太好了。荣誉