Python的 - ConfigParser - AttributeError的:Config

2019-09-02 02:21发布

我创建了天服务器的报价。 我在读从一个INI文件,其文本低于选项:

[Server]
host =
port = 17

[Quotes]
file=quotes.txt

然而,当我使用ConfigParser,它给了我这个错误:

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__'

这里是我的代码:

#!/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()

为什么会出现这个错误,我能做些什么来解决这个问题?

Answer 1:

快速阅读后,它看起来像你想读取数据,就好像它是一本字典,当你应该使用: config.get(section, data)

例如:

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

要写入的配置文件,你可以这样做:

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


Answer 2:

所包含的ConfigParser与Python 2.7不会以这种方式工作。 你可以,但是,实现正是你所使用向后移植什么建议configparser模块上PyPy可用 。

pip install configparser

然后,你可以为你在Python 3只想用它*

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

注意

  • configparser不使用Python 3版本兼容100%。
  • 该反向移植是为了保持与在Python 3.2+香草释放100%的兼容性。
  • 以这种方式上面显示使用的话,会默认为Python 3的实现(如果可用)。


文章来源: Python - ConfigParser - AttributeError: ConfigParser instance has no attribute '__getitem__'