2013-03-06 2 views
3

Я работаю над плагином для GPS IDE, и хотел бы иметь две его версии: 1. GPS-плагин - работает с GPS 2. Автономное приложение без запуска GPSЗависимость впрыска в python (зависит от доступности модуля)

Один из возможностей плагина - выделение линии. Когда плагин запускается как автономное приложение, это невозможно. Я создал класс gpshelper для этого, который импортирует модуль GPS. Импорт бросает ImportException при запуске как автономное приложение (поскольку модуль GPS недоступен). Интересно, как я должен вставлять этот модуль gpshelper в свой плагин.

Подсветка выполняется во время вызова метода выделения (этот метод вызывает gpshelper).

Это нормально, когда внутри метода выделения я делаю это:

try: 
    import gpshelper 
except ImportError: 
    warnings.warn('Program is running as python app (not GPS plugin)') 

Может быть, есть какой-то другой/лучший способ, как сделать это?

+0

Является ли метод подсветки многократно? Если это так, вы можете установить переменную типа 'USE_GPS = False', когда ошибка будет поднята, а затем только один раз выполнить блок try/except. –

+0

Он вызывается один раз за действие пользователя (после двойного щелчка на списке gtk.treeview). Но мой вопрос скорее о «чистом коде», чем о производительности. –

ответ

2

Определите процедуру gps_highlight как часть части try, импортирующей gpshelper. Затем вызовите эту процедуру из существующего кода. В исключающей части определите фиктивную функцию gps_highlight. Таким образом, вы сохраняете свой код звонка чистым:

import warnings 

try: 
    import gpshelper 
    def gps_highlight(*args, **kw): 
     return gpshelper.highlight(*args, **kw) 
except ImportError: 
    warnings.warn('Program is running as python app (not GPS plugin)') 
    def gps_highlight(*args, **kw): 
     return None 

# after this you can safely call gps_highlight with the right parameters 
# as needed by gpshelper.highlight 
Смежные вопросы