Изменение потока программы на основе доступных библиотек

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

Как я могу это сделать?

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

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) 

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

Вместо флага, предложенного @ Раймондом Хеттингером, вы можете установить 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)