2013-05-06 4 views
5

오늘 서버의 견적을 만들고 있습니다. 내가 그 텍스트 INI 파일에서 옵션을 읽고있다은 다음과 같습니다 :Python - ConfigParser - AttributeError : ConfigParser 인스턴스에 '__getitem__'속성이 없습니다.

[Server] 
host = 
port = 17 

[Quotes] 
file=quotes.txt 

그러나, 나는 ConfigParser를 사용하는 경우, 그것은 나에게이 오류 제공 :

#!/usr/bin/python 

from socket import * 
from ConfigParser import * 
import sys 

class serverConf: 
    port = 17 
    host = "" 
    quotefile = "" 

def initConfig(filename): 


    config = ConfigParser() 

    config['Server'] = {'port': '17', 'host': ''} 
    config['Quotes'] = {'file': 'quotes.txt'} 

    with open(filename, 'w') as configfile: 
     config.write(configfile) 


def parseConfig(filename): 

    configOptions = serverConf() 



    config = ConfigParser() 
    config.read(filename) 

    server = config['Server'] 

    configOptions.port = int(server['port']) 
    configOptions.host = conifg['Server']['host'] 
    configOptions.quoteFile = config['Quotes']['file'] 



    print "[Info] Read configuration options" 

    return configOptions 

def doInitMessage(): 

    print "Quote Of The Day Server" 
    print "-----------------------" 
    print "Version 1.0 By Ian Duncan" 
    print "" 

def Start(): 

    filename = "qotdconf.ini" 
    configOptions = parseConfig(filename) 

    print "[Info] Will start server at: " + configOptions.host + ":" + configOptions.port 

Start() 
: 여기
Traceback (most recent call last): 
    File "server.py", line 59, in <module> 
    Start() 
    File "server.py", line 55, in Start 
    configOptions = parseConfig(filename) 
    File "server.py", line 33, in parseConfig 
    server = config['Server'] 
AttributeError: ConfigParser instance has no attribute '__getitem__' 

내 코드입니다

왜이 오류가 발생하며이를 해결하려면 어떻게해야합니까? 빠른 후

+1

대괄호가 작동하지 않습니다. 'get()'함수를 사용하십시오. 'configOptions.host = conifg.get ('서버', '호스트') ' http://docs.python.org/2/library/configparser.html#examples – M456

+0

글쎄, 'config'를 사전처럼 사용하고 그렇지 않은 경우 ConfigParser 인스턴스입니다 ... – kindall

+0

미래에 [ConfigParser 문서] (http://docs.python.org)를 참조하십시오. /2/library/configparser.html#configparser-objects). –

답변

10

당신이 그것을 사전 인 것처럼 데이터를 읽을하려는 것처럼 보인다 읽어 사용해야하는 경우 : config.get(section, data)

EG을 :

... 
config = ConfigParser() 
config.read(filename) 
... 
configOptions.port = config.getint('Server', 'port') 
configOptions.host = config.get('Server', 'host') 
configOptions.quoteFile = config.get('Quotes', 'file') 

는 config-에 쓸 수 다음과 같이 할 수있는 파일 :

... 
def setValue(parser, sect, index, value): 
    cfgfile = open(filename, 'w') 
    parser.set(sect, index, value) 
    parser.write(cfgfile) 
    cfgfile.close() 
+0

일부 웹 사이트에서 가이드를 잘못 읽었을 것입니다. 꺾쇠 괄호를 사용한다고 생각했기 때문입니다. – Igor

+0

파이썬 docs를 사용할 수 있습니다 : http://docs.python.org/2/library/configparser.html – JHolta

+12

이것은 configparser의 python 3 버전과 configparser의 pyhton 2.7 버전의 차이점입니다. 파이썬 3.3에서, 이것은 당신이 일반적으로하는 일입니다. – chiffa

1

파이썬 2.7이 포함 된 ConfigParser은 이러한 방식으로 작동하지 않습니다. 당신은, 그러나, 당신이 012 포트 번호 configparser 모듈 available on PyPy 모듈을 사용하여 제안한 정확히 달성 할 수 있습니다.

pip install configparser 

그럼 당신은 단지로 사용할 수 있습니다 당신 것

  • configparser 파이썬 3 버전과 100 % 호환이 아닌 참고 *

    from configparser import ConfigParser 
    parser = ConfigParser() 
    parser.read("settings.ini") 
    # or parser.read_file(open("settings.ini")) 
    parser['Server']['port'] 
    # '17' 
    parser.getint('Server', 'port') 
    # 17 
    

    파이썬 3.

  • 백 포트는 Python 3.2 이상에서 바닐라 릴리스와 100 % 호환되도록 고안되었습니다.
  • 위와 같이이 방법을 사용하면 Python 3 구현이 기본적으로 사용됩니다.