Ответ 1
Я видел, что эта идиома много использовала, поэтому вам даже не нужно обманывать ОС:
try:
import json
except ImportError:
import simplejson as json
В моей программе я хочу импортировать simplejson или json на основе того, включена ли ОС, является ли Windows или Linux. Я принимаю имя ОС в качестве ввода от пользователя. Теперь, правильно ли сделать следующее?
osys = raw_input("Press w for windows,l for linux")
if (osys == "w"):
import json as simplejson
else:
import simplejson
Я видел, что эта идиома много использовала, поэтому вам даже не нужно обманывать ОС:
try:
import json
except ImportError:
import simplejson as json
Чтобы ответить на вопрос в названии, но не в конкретном случае, который вы предоставляете, это совершенно правильно, тонны пакетов делают это. Вероятно, лучше выяснить ОС самостоятельно, чем полагаться на пользователя; здесь pySerial делает это в качестве примера.
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
Не рекомендуется использовать для привязки json или simplejson к платформе ОС. simplejson - это новая и расширенная версия json, поэтому мы должны сначала попробовать импортировать ее.
На основе версии python вы можете попробовать выполнить способ импорта json или simplejson
import sys
if sys.version_info > (2, 7):
import simplejson as json
else:
import json
Я просто столкнулся с той же проблемой, и для меня это сработало, заключив импорт с оператором try before.
try:
import greengrasssdk
client = greengrasssdk.client('iot-data')
except Exception as e:
import boto3
client = boto3.client('iot-data')