大家早上好!(是的,我知道,早上没有必要站在你这边;-))
我来找你是因为我的一天开始时有一段我无法解释的代码的小错误。
我目前正在建立一个旨在做两件简单事情的课程:
打开一个 YAML 格式的配置文件,然后加载这个。
对我来说不幸的是,我全新的革命计划(这显然是一个笑话)今天不想成为一名好士兵,并且拒绝做它应该做的事情。
这是我的代码:
main.py 部分:
#!/usr/bin/env python
import socket
from models import setting
run = setting.app_config()
run.get_config()
这是设置模块:
import os
import yaml
class app_config:
def __init__(self, custom_cfg=None):
self.workdir = os.getcwd()
self.default_config_name = 'app_config.yaml'
self.default_config_path = self.workdir+"/assets/"
if custom_cfg is None:
self.config_file_path = self.default_config_path+self.default_config_name
else:
self.config_file_path = custom_cfg
def get_config(self):
app_config_file = open(self.config_file_path, 'r')
parsed_config_file = yaml.load(app_config_file, 'r')
app_config_file.close()
network_settings = parsed_config_file['network']
hostname = network_settings['host']
socket = network_settings['port']
buffer_size = network_settings['buffer_size']
print network_settings, hostname, socket, buffer_size
所以,现在,这两段代码的问题似乎来自这个声明:
parsed_config_file = yaml.load(app_config_file, 'r') <-- Line 22
这导致了一个非常漂亮的错误消息:
Traceback (most recent call last):
File "main.py", line 6, in <module>
run.get_config()
File "/home/dri/devil_project/models/setting.py", line 22, in get_config
parsed_config_file = yaml.load(app_config_file, 'r')
File "/usr/local/lib/python2.6/dist-packages/yaml/__init__.py", line 69, in load
loader = Loader(stream)
TypeError: 'str' object is not callable
现在,如果我尝试打印我的 app_config_file 变量或尝试使用 for 循环读取此文件,一切都很完美,打印工作正常,我的文件打开并且我可以读取它。
好吧,如果有人已经使用 YAML 模块(PyYAML 模块)遇到过这种情况,我会对他的解决方案感兴趣;-)
非常感谢!