int或long在十六进制python optparse中?

时间:2011-04-22 15:59:51

标签: python module option optparse

你好我的optparse python有问题。

它是关于optparse的默认选项值i表示为十六进制,但是当转换为int或long时,它不起作用,如optparse python所定义。

http://docs.python.org/library/optparse.html#standard-option-types

这是我的一小段代码:

    parser.add_option("-o", "--offset", 
              dest="offset_pattern", 
              default=0x41306141, 
              type="long", 
              action="store", 
              metavar="HEX",
              help="define the offset will be found                 [default : %default]")

但它仍然给我一个像这样的错误,即使我使用int或long作为数据类型

Traceback (most recent call last):
  File "./pattern.py", line 155, in <module>
    main()
  File "./pattern.py", line 151, in main
    proxyengine.parseoption()
  File "./pattern.py", line 132, in parseoption
    (options, args) = parser.parse_args()
  File "/usr/lib/python2.6/optparse.py", line 1365, in parse_args
    values = self.get_default_values()
  File "/usr/lib/python2.6/optparse.py", line 1310, in get_default_values
    defaults[option.dest] = option.check_value(opt_str, default)
  File "/usr/lib/python2.6/optparse.py", line 756, in check_value
    return checker(self, opt, value)
  File "/usr/lib/python2.6/optparse.py", line 416, in check_builtin
    _("option %s: invalid %s value: %r") % (opt, what, value))
optparse.OptionValueError: option --offset: invalid long integer value: 'buff'

和这个

Traceback (most recent call last):
  File "./pattern.py", line 155, in <module>
    main()
  File "./pattern.py", line 151, in main
    proxyengine.parseoption()
  File "./pattern.py", line 132, in parseoption
    (options, args) = parser.parse_args()
  File "/usr/lib/python2.6/optparse.py", line 1365, in parse_args
    values = self.get_default_values()
  File "/usr/lib/python2.6/optparse.py", line 1310, in get_default_values
    defaults[option.dest] = option.check_value(opt_str, default)
  File "/usr/lib/python2.6/optparse.py", line 756, in check_value
    return checker(self, opt, value)
  File "/usr/lib/python2.6/optparse.py", line 416, in check_builtin
    _("option %s: invalid %s value: %r") % (opt, what, value))
optparse.OptionValueError: option --offset: invalid integer value: 'buff'

任何帮助? 谢谢, 枪。

[编辑] 我已删除此代码,该程序正常工作

    parser.add_option("-n", "--variable", 
              dest="offset_pattern", 
              default="buff", 
              type="string", 
              action="store", 
              metavar="STR",
                      help="define variable buffer name will be create          [default : %default]")

为什么我必须删除工作程序的代码?

1 个答案:

答案 0 :(得分:3)

您有长整数参数--offset和字符串参数--variable到达同一目的地(offset_pattern)。显然这会混淆optparse,它试图将字符串参数的默认值应用于long参数并导致异常。

对于具有不同类型和默认值的两个选项,无论如何都无法转到同一目的地。更改其中一个选项的目的地将解决问题。