Подтвердить что ты не робот

Условный импорт модулей в Python

В моей программе я хочу импортировать simplejson или json на основе того, включена ли ОС, является ли Windows или Linux. Я принимаю имя ОС в качестве ввода от пользователя. Теперь, правильно ли сделать следующее?

osys = raw_input("Press w for windows,l for linux")
if (osys == "w"):
    import json as simplejson
else:
    import simplejson  
4b9b3361

Ответ 1

Я видел, что эта идиома много использовала, поэтому вам даже не нужно обманывать ОС:

try:
    import json
except ImportError:
    import simplejson as json

Ответ 2

Чтобы ответить на вопрос в названии, но не в конкретном случае, который вы предоставляете, это совершенно правильно, тонны пакетов делают это. Вероятно, лучше выяснить ОС самостоятельно, чем полагаться на пользователя; здесь pySerial делает это в качестве примера.

serial/__init__.py

import sys

if sys.platform == 'cli':
    from serial.serialcli import Serial
else:
    import os
    # chose an implementation, depending on os
    if os.name == 'nt':  # sys.platform == 'win32':
        from serial.serialwin32 import Serial
    elif os.name == 'posix':
        from serial.serialposix import Serial, PosixPollSerial, VTIMESerial  # noqa
    elif os.name == 'java':
        from serial.serialjava import Serial
    else:
        raise ImportError(
            "Sorry: no implementation for your platform ('{}') available".format(
                os.name
            )
        )

Это следует использовать только в тех случаях, когда вы предполагаете и нуждаетесь в серьезной гарантии того, что будут присутствовать определенные интерфейсы/функции: например, "файл" под названием /dev/ttyX. В вашем случае: при работе с JSON нет ничего, что на самом деле зависит от ОС, и вы только проверяете, существует ли пакет или нет. В этом случае, просто try, чтобы импортировать его, и отступите с except, если он потерпит неудачу:

try:
    import some_specific_json_module as json
except ImportError:
    import json

Ответ 3

Не рекомендуется использовать для привязки json или simplejson к платформе ОС. simplejson - это новая и расширенная версия json, поэтому мы должны сначала попробовать импортировать ее.

На основе версии python вы можете попробовать выполнить способ импорта json или simplejson

import sys
if sys.version_info > (2, 7):
    import simplejson as json
else:
    import json

Ответ 4

Я просто столкнулся с той же проблемой, и для меня это сработало, заключив импорт с оператором try before.

try:
    import greengrasssdk
    client = greengrasssdk.client('iot-data')
except Exception as e:
    import boto3
    client = boto3.client('iot-data')