Optparse с целочисленным аргументом - PullRequest
4 голосов
/ 05 января 2012

Я столкнулся со следующей интересной ошибкой:

parser.add_option("-n", "--number", metavar="NUMBER", type="int", 
                  help="number is NUMBER")
(options, args) = parser.parse_args()

if options.number: # User added a number
  do something
  exit(0)

Через некоторое время я обнаружил, что мое приложение не работает, если число равно 0, но это должно быть действительное число (должно быть> =0).Проблема в том, что 0 - это False.

, я должен изменить его на:

if options.number is not None:

или что-то более сложное?

Ответы [ 2 ]

4 голосов
/ 05 января 2012

В Python целые числа могут использоваться в качестве логических значений, тогда как все ненулевое значение разрешается до True и 0 до False.Поэтому, если вы хотите проверить, установлена ​​ли опция --number, вы должны проверить против None (что будет означать, что опция не установлена).

Итак:

if options.number is not None:

отлично.

2 голосов
/ 05 января 2012

Также рассмотрите возможность использования модуля argparse вместо optparse, так как последний не рекомендуется с Python 2.7. Последний раздел документации argparse посвящен обновлению кода optparse:

http://docs.python.org/library/argparse.html

Я не знаю, как это решает вашу конкретную проблему.

...