在__init初始化yaml模块__。py

时间:2015-08-15 17:03:39

标签: python yaml packages pyyaml

我正在使用PyYAML,并且希望能够在我的.yaml文件中使用字符串连接构造函数。

This post显示了如何将这样的构造函数添加到PyYAML:

import yaml

## define custom tag handler
def join(loader, node):
    seq = loader.construct_sequence(node)
    return ''.join([str(i) for i in seq])

## register the tag handler
yaml.add_constructor('!join', join)

当我在python终端中输入时,上面的工作原理。但是,我想将上述内容放在my_package的{​​{1}}文件中,以便我可以这样做:

__init__.py

但是,这会与消息崩溃:

from my_package import yaml  # my_package.__init__.py contains the above code

yaml.load("""
user_dir: &DIR /home/user
user_pics: !join [*DIR, /pics]
""")

发生了什么?为什么不能找到AttributeError Traceback (most recent call last) <ipython-input-1-1107dafdb1d2> in <module>() ----> 1 import simplelearn.yaml /home/mkg/projects/simplelearn/simplelearn/__init__.py in <module>() ----> 1 import yaml 2 3 def __join(loader, node): 4 ''' 5 Concatenates a sequence of strings. /home/mkg/projects/simplelearn/simplelearn/yaml.pyc in <module>() AttributeError: 'module' object has no attribute 'add_constructor'

1 个答案:

答案 0 :(得分:1)

您从文件中加载模块yaml

/home/mkg/projects/simplelearn/simplelearn/yaml.pyc

您要么命名自己的一个文件yaml.py,要么确实拥有该文件 之前并重命名,但忘记删除yaml.pyc。因此,您没有使用import yaml加载PyYAML解释器。

最简单的验证方法是在import之后包含一个临时行:

import yaml
print(yaml.__file__)

应该看到.../site-packages/yaml/__init__.pyc之类的内容。