Dalam program saya, saya ingin mengimpor simplejson atau json berdasarkan apakah OS yang digunakan pengguna adalah Windows atau Linux. Saya mengambil nama OS sebagai masukan dari pengguna. Sekarang, apakah benar melakukan hal berikut?
osys = raw_input("Press w for windows,l for linux")
if (osys == "w"):
import json as simplejson
else:
import simplejson
platform.platform()
atauplatform.system()
harus melakukan apa yang Anda butuhkan, daripada meminta pengguna untuk memasukkan sesuatu setiap kali kode dijalankan.Jawaban:
Saya telah melihat idiom ini banyak digunakan, jadi Anda bahkan tidak perlu melakukan OS sniffing:
try: import json except ImportError: import simplejson as json
sumber
simplejson as json
karena kemungkinan ini adalah versijson
modul standar yang lebih baru (lebih cepat) .ujson
untuk kecepatanUntuk menjawab pertanyaan dalam judul Anda tetapi bukan kasus tertentu yang Anda berikan, itu benar sekali, banyak paket melakukan ini. Mungkin lebih baik untuk mencari tahu OS sendiri daripada mengandalkan pengguna; inilah pySerial melakukannya sebagai contoh.
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 ) )
Ini harus digunakan hanya dalam kasus di mana Anda berasumsi dan membutuhkan jaminan kuat bahwa antarmuka / fitur tertentu akan ada di sana: misalnya 'file' dipanggil
/dev/ttyX
. Dalam kasus Anda: berurusan dengan JSON, tidak ada yang benar-benar spesifik untuk OS dan Anda hanya memeriksa apakah paket tersebut ada atau tidak. Dalam hal ini, cukuptry
untuk mengimpornya, dan kembali denganexcept
jika gagal:try: import some_specific_json_module as json except ImportError: import json
sumber
simplejson
ataujson
tersedia. Anda mengutip kode dari impor khusus OS , yang merupakan kasus yang sangat berbeda. Lihat jawaban Matt untuk pendekatan yang benar.json
paket tersebut dan mencoba menjawab pertanyaan yang lebih umum "dapatkah Anda melakukan impor modul bersyarat".Tidak disarankan untuk menggunakan json atau simplejson dengan platform OS. simplejson adalah versi json yang lebih baru dan lanjutan jadi kita harus mencoba mengimpornya terlebih dahulu.
Berdasarkan versi python Anda dapat mencoba cara di bawah ini untuk mengimpor json atau simplejson
import sys if sys.version_info > (2, 7): import simplejson as json else: import json
sumber