W moim programie chcę zaimportować simplejson lub json w zależności od tego, czy system operacyjny, na którym pracuje użytkownik, to Windows czy Linux. Biorę nazwę systemu operacyjnego jako dane wejściowe od użytkownika. Czy teraz należy wykonać następujące czynności?
osys = raw_input("Press w for windows,l for linux")
if (osys == "w"):
import json as simplejson
else:
import simplejson
platform.platform()
lubplatform.system()
powinien zrobić to, czego potrzebujesz, zamiast zmuszać użytkownika do wprowadzania czegoś za każdym razem, gdy kod jest uruchamiany.Odpowiedzi:
Widziałem często używany ten idiom, więc nie musisz nawet wąchać systemu operacyjnego:
źródło
simplejson as json
ponieważ jest to prawdopodobnie nowsza (szybsza) wersja standardowegojson
modułu.ujson
dla szybkościAby odpowiedzieć na pytanie w twoim tytule, ale nie na konkretny przypadek, który podasz, jest całkowicie poprawny, robi to mnóstwo paczek. Prawdopodobnie lepiej jest samodzielnie wymyślić system operacyjny, zamiast polegać na użytkowniku; tutaj pySerial robi to jako przykład.
serial/__init__.py
Powinno to być używane tylko w przypadkach, gdy zakładasz i potrzebujesz silnej gwarancji, że będą tam określone interfejsy / funkcje: np. Wywołano „plik”
/dev/ttyX
. W twoim przypadku: mając do czynienia z JSON, nie ma nic, co jest specyficzne dla systemu operacyjnego, a ty sprawdzasz tylko, czy pakiet istnieje, czy nie. W takim przypadku wystarczytry
go zaimportować, aexcept
jeśli się nie powiedzie, skorzystaj z opcji:źródło
simplejson
czyjson
jest dostępny. Cytujesz kod z importu nieodłącznie specyficznego dla systemu operacyjnego , co jest zupełnie innym przypadkiem. Zobacz odpowiedź Matta, aby poznać właściwe podejście.json
pakietu i próbowałem odpowiedzieć na bardziej ogólne pytanie „czy możesz dokonać warunkowego importu modułów”.Nie zaleca się używania do łączenia json lub simplejson z platformą systemu operacyjnego. simplejson jest nowszą i zaawansowaną wersją json, więc powinniśmy najpierw spróbować ją zaimportować.
W oparciu o wersję Pythona możesz spróbować poniżej sposobu importowania json lub simplejson
źródło