大家早上好!(是的,我知道,早上对你来说没有必要;-)
我来找你是因为我的一天开始时有一个我无法解释的代码上的小错误。
我目前正在构建一个旨在做两件简单事情的类:
打开一个YAML格式的配置文件,然后加载这个文件。
不幸的是,我的全新革命计划(显然这是个笑话)今天不想成为一名优秀的士兵,拒绝做它应该做的事。
这是我的代码:
主要.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 one)面临这种情况,我会对他的解决方案感兴趣;-)
非常感谢!
你告诉加载函数你想打开一些东西进行读取,所以假设你给了它一个文件。去掉"r"参数。
除非您想指定一个文件路径,否则在这种情况下,我认为您要加载的是app_config_file_path