int или long в шестнадцатеричном python optparse? - PullRequest
0 голосов
/ 22 апреля 2011

привет, у меня проблема с optparse python.

это значение параметра optparse по умолчанию, я представляю его как шестнадцатеричное, но оно не работает при преобразовании в 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 Ответ

3 голосов
/ 22 апреля 2011

У вас есть и длинный целочисленный параметр --offset, и строковый параметр --variable, идущие в одно и то же место назначения (offset_pattern).Очевидно, это сбивает с толку optparse, который пытается применить значение по умолчанию для строкового параметра к длинному параметру и вызывает исключение.

В любом случае не имеет смысла использовать два варианта с разными типами и значениями по умолчанию для одного и того же пункта назначения.Изменение пункта назначения для одного из вариантов решит проблему.

...