Pour répondre à la question de votre titre mais pas le cas particulier que vous fournissez, c'est parfaitement correct, des tonnes de paquets font cela. Il est probablement préférable de comprendre le système d'exploitation vous-même plutôt que de compter sur l'utilisateur ; voici pySerial qui le fait à titre d'exemple.
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
)
)
Cette option ne doit être utilisée que dans les cas où l'on suppose et où l'on a besoin d'une garantie forte que certaines interfaces/fonctionnalités seront présentes : par exemple, un "fichier" appelé /dev/ttyX
. Dans votre cas : en traitant avec JSON, il n'y a rien qui soit spécifique au système d'exploitation et vous vérifiez seulement si le paquet existe ou non. Dans ce cas, il suffit de try
pour l'importer, et se replier avec un except
s'il échoue :
try:
import some_specific_json_module as json
except ImportError:
import json
37 votes
Pourquoi prenez-vous le nom de l'os comme entrée de l'utilisateur ? Regardez dans le module de la plateforme. docs.python.org/library/platform.html
platform.platform()
oplatform.system()
devrait répondre à vos besoins, plutôt que de demander à l'utilisateur d'entrer quelque chose à chaque fois que le code est exécuté.64 votes
@S.Lott : sérieusement ? Vous savez que les votes positifs et négatifs sont censés refléter la qualité de l'article. pregunta n'est-ce pas ? Et pas si vous êtes d'accord avec quelque chose sinon dans le code de l'OP.
2 votes
@jalf : C'est une mauvaise question à tous égards, sauf en ce qui concerne la grammaire. Elle ne devrait pas être trouvée en tant que première réponse à n'importe quel type de recherche.
18 votes
@S.Lott il n'y a rien de mal à vouloir savoir si les importations conditionnelles sont pythoniques. Et manifestement, d'autres personnes sont d'accord puisqu'il y a +50 votes positifs malgré vos efforts.
0 votes
Principes connexes : stackoverflow.com/questions/11360858/