Ответ 1
Стандартная библиотека Python использует его, поэтому он определенно правилен и безопасен. Смотрите отличный источник os
:
if 'posix' in _names: name = 'posix' linesep = '\n' from posix import * try: from posix import _exit except ImportError: pass import posixpath as path import posix __all__.extend(_get_exports_list(posix)) del posix
Это довольно распространено для условного импорта модулей в python. Вместо if
вы также увидите комбинацию try:
/except ImportError:
:
try:
from subprocess import check_output
except ImportError:
# Python 2.6 and before
def check_output(*popenargs, **kwargs):
from subprocess import Popen
if 'stdout' in kwargs:
raise ValueError('stdout argument not allowed, it will be '
'overridden.')
process = Popen(stdout=PIPE, *popenargs, **kwargs)
output, unused_err = process.communicate()
retcode = process.poll()
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
raise CalledProcessError(retcode, cmd)
return output
Здесь мы в основном используем моральный эквивалент теста if
: если вы можете импортировать check_output
, сделайте это, иначе определите полную функцию здесь.
Оператор import - это просто перевязка внешнего фрагмента кода с локальным именем. Использование потока управления if
для управления импортом ничем не отличается от назначения переменной в инструкции if
в этом отношении. Вам нужно убедиться, что вы не используете имя без его определения в любом случае.