0

大家早上好!(是的,我知道,早上没有必要站在你这边;-))

我来找你是因为我的一天开始时有一段我无法解释的代码的小错误。

我目前正在建立一个旨在做两件简单事情的课程:

打开一个 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 模块)遇到过这种情况,我会对他的解决方案感兴趣;-)

非常感谢!

4

1 回答 1

2

你告诉加载函数你想打开一些东西来阅读,所以它假设你给它一个文件。摆脱'r'论点。

除非您想指定文件路径,否则我认为您要加载的是app_config_file_path

于 2012-09-05T08:45:53.533 回答