我正在使用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'
?
答案 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
之类的内容。