Python 中模块的条件导入
在我的程序中,我想根据 Linux 或 Windows 操作系统导入 simplejson
或 json
。我将操作系统名称作为用户的输入。现在,在这样的条件下这样做是否正确?
osys = raw_input("Press l for linux, w for Windows:")
if (osys == "w"):
import json as simplejson
else:
import simplejson
In my program I want to import simplejson
or json
based on OS being Linux or Windows. I take the OS name as input from the user. Now, is it correct to do it with a condition like this?
osys = raw_input("Press l for linux, w for Windows:")
if (osys == "w"):
import json as simplejson
else:
import simplejson
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我已经看到这个习惯用了很多,所以你甚至不需要做操作系统嗅探:
I've seen this idiom used a lot, so you don't even have to do OS sniffing:
要回答您的标题中的问题,而不是您提供的特定情况,这是完全正确的,大量的软件包都这样做。最好自己弄清楚操作系统,而不是依赖用户;这是 pySerial 做的一个例子。
serial/__init__.py
这应该仅在您假设并需要强有力保证某些接口/功能存在的情况下使用:例如名为
/dev/ 的“文件” ttyX
。在您的情况下:处理 JSON,实际上没有任何特定于操作系统的内容,您只是检查包是否存在。在这种情况下,只需尝试
导入它,如果失败则使用except
回退:To answer the question in your title but not the particular case you provide, it's perfectly correct, tons of packages do this. It's probably better to figure out the OS yourself instead of relying on the user; here's pySerial doing it as an example.
serial/__init__.py
This should be only used in cases where you're assuming and need a strong guarantee that certain interfaces/features will be there: e.g. a 'file' called
/dev/ttyX
. In your case: dealing with JSON, there's nothing that is actually OS-specific and you are only checking if the package exists or not. In that case, justtry
to import it, and fall-back with anexcept
if it fails:不建议使用 json 或 simplejson 与 OS 平台绑定。 simplejson 是 json 的更新和高级版本,因此我们应该首先尝试导入它。
基于 python 版本,您可以尝试以下方式导入 json 或 simplejson
It is not advisable to use to bind json or simplejson with OS platform. simplejson is newer and advanced version of json so we should try to import it first.
Based on python version you can try below way to import json or simplejson