在Python中有条件地导入模块

在我的程序中,我想根据用户所在的操作系统是Windows还是Linux来导入simplejson或json。 我把操作系统名称作为用户的input。 现在,做下面的事情是正确的吗?

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

我已经看到这个成语用了很多,所以你甚至不必做OS嗅探:

 try: import json except ImportError: import simplejson as json 

完全正确的,大量的包做这个。 最好是自己弄清楚操作系统而不是依靠用户; 这里是pySerial做为例子。

serial/__init__.py

 import sys if sys.platform == 'cli': from serialcli import * else: import os # chose an implementation, depending on os if os.name == 'nt': #sys.platform == 'win32': from serialwin32 import * elif os.name == 'posix': from serialposix import * elif os.name == 'java': from serialjava import * else: raise Exception("Sorry: no implementation for your platform ('%s') available" % os.name) 

使用OS平台绑定json或simplejson是不可取的。 simplejson是json的更新和高级版本,所以我们应该先尝试导入它。

基于python版本,你可以尝试下面的方式来导入json或simplejson

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