Изменить поток программы на основе доступных библиотек - PullRequest
4 голосов
/ 23 октября 2011

Я занимаюсь разработкой модели Python, которая будет поддерживать построение графиков, если установлены правильные модули.Я хотел бы, чтобы исходный код был таким же, если это возможно, IE, если графическая модель не может быть загружена, графическое отображение будет игнорироваться из логики меню.

Как мне это сделать?

Ответы [ 3 ]

7 голосов
/ 23 октября 2011

Попытка импорта и установка флага, если не удается. Затем используйте флаг, чтобы определить, предлагать ли графический вывод:

try:
    import Tkinter
    gui_installed = True
except ImportError:
    gui_installed = False


...

result = somecalc()
if gui_installed:
    display_with_gui(result)
else:
    display_as_text(result)
1 голос
/ 23 октября 2011

Да.Вы можете заключить оператор import в блок try - except.Обычно используется для обратной совместимости.Например, путем импорта запасного модуля в качестве желаемого модуля.Таким образом, остальная часть кода может не знать, какой модуль фактически используется.

0 голосов
/ 23 октября 2011

Вместо флага , предложенного @Raymond Hettinger , вы можете установить None фактическое имя, которое предоставляет дополнительные возможности:

try: import Tkinter
except ImportError:
    display_with_gui = None
else:
    def display_with_gui(): # use Tkinter here
        pass

result = somecalc()
if display_with_gui:
    display_with_gui(result)
else:
    display_as_text(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...