如何正确导入和显式引用函数

时间:2018-03-14 15:33:15

标签: python import

我想序列化一个mongoldb游标。为此,我想使用bson.json_util.dumps。有效的代码示例:

>>> from bson.json_util import dumps
>>> dumps(values)
'[{...}]'

但是,我也想在同一个代码中使用json.dumps。出于这个原因,我想显式调用bson.json_util.dumps:

>>> import bson
>>> bson.json_util.dumps(values)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'json_util'

这会产生错误。我知道我可以通过使用&#34; import as&#34;来解决我的问题,但我认为这不是一个干净的解决方案,我觉得我从根本上忽略了一点。 问题:有人可以向我解释为什么第二个代码段不是一个选项?

我最好的猜测是我有一些冲突的模块(其中一个pymongo中有bson?),所以这是我的pip冻结输出:

$ pip freeze
certifi==2018.1.18
chardet==3.0.4
click==6.7
Flask==0.12.2
idna==2.6
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
pycrypto==2.6.1
pymongo==3.6.1
requests==2.18.4
urllib3==1.22
Werkzeug==0.14.1

2 个答案:

答案 0 :(得分:2)

bson是一个包。导入包不会自动授予您访问其模块的权限;只有那些明确导入到包__init__.py中的模块才可访问。对于其他所有内容,您需要单独导入模块。

注意,您可以直接导入json_util:

from bson import json_util
json_util.dumps(...)

或者,正如您所提到的,使用as来对函数进行别名:

from bson.json_util import dumps as bson_dumps

答案 1 :(得分:1)

我不知道如何在没有安装bson的情况下测试它,但我认为以下内容应该有效:

import bson.json_util
bson.json_util.dumps(values)