0

みなさんおはようございます!(ええ、あなたの側に朝は必要ありません;-))

私があなたのところに来たのは、説明できないコードの小さなバグで 1 日を始めているからです。

私は現在、2つの簡単なことを行うことを目的としたクラスを構築しています:

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

したがって、これら 2 つのコードの問題は、次の宣言に起因しているようです。

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 に答える