2012-01-05 3 views
4

я попал в такую ​​интересную ошибку:Optparse с целочисленным аргументом

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: 

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

+1

Это изменяет работу? –

+0

@MarceloCantos Да, я прошу, потому что приложение может выглядеть непрофессионально. – xralf

+0

Я сохранил распечатку из старой работы для потомков. Требуется несколько сотен строк над несколькими функциями (не говоря уже о двух или трех диаграммах рабочих процессов), чтобы сравнить две даты и поднять ошибку, если она предшествует другой. Понятие «непрофессиональный» (или «сложный») никогда не должно входить в него. Используйте простейшую вещь, которая работает, период. Обратите внимание, что я не критикую вопрос; это разумный вопрос. Но когда кто-то еще беспокоится, что их код недостаточно сложный, я нервничаю. –

ответ

4

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

Итак:

if options.number is not None: 

это прекрасно.

2

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

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

Я не знаю, как это имеет дело с конкретной проблемой, хотя.

+0

Спасибо. У меня не было аппетита читать длинную веб-страницу с помощью argparse, но раздел об обновлении, похоже, ускоряет переход между argparse и optparse. – xralf

Смежные вопросы