Python Config Parser can't find section?

左心房为你撑大大i 提交于 2020-01-24 23:39:47

问题


I'm trying to use ConfigParser to read a .cfg file for my pygame game. I can't get it to function for some reason. The code looks like this:

import ConfigParser
def main():
    config = ConfigParser.ConfigParser()
    config.read('options.cfg')
    print config.sections()
    Screen_width = config.getint('graphics','width')
    Screen_height = config.getint('graphics','height')

The main method in this file is called in the launcher for the game. I've tested that out and that works perfectly. When I run this code, I get this error:

Traceback (most recent call last):
  File "Scripts\Launcher.py", line 71, in <module>
    Game.main()
  File "C:\Users\astro_000\Desktop\Mini-Golf\Scripts\Game.py", line 8, in main
    Screen_width = config.getint('graphics','width')
  File "c:\python27\lib\ConfigParser.py", line 359, in getint
    return self._get(section, int, option)
  File "c:\python27\lib\ConfigParser.py", line 356, in _get
    return conv(self.get(section, option))
  File "c:\python27\lib\ConfigParser.py", line 607, in get
    raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'graphics'

The thing is, there is a section 'graphics'.

The file I'm trying to read from looks like this:

[graphics]
height = 600
width = 800

I have verified that it is, in fact called options.cfg. config.sections() returns only this: "[]"

I've had this work before using this same code, but it wont work now. Any help would be greatly appreciated.


回答1:


I always use the SafeConfigParser:

from ConfigParser import SafeConfigParser

def main():
    parser = SafeConfigParser()
    parser.read('options.cfg')
    print(parser.sections())
    screen_width = parser.getint('graphics','width')
    screen_height = parser.getint('graphics','height')

Also make sure there is a file called options.cfg and specify the full path if needed, as I already commented. Parser will fail silently if there is no file found.




回答2:


Your config file probably is not found. The parser will just produce an empty set in that case. You should wrap your code with a check for the file:

from ConfigParser import SafeConfigParser
import os

def main():
    filename = "options.cfg"
    if os.path.isfile(filename):
        parser = SafeConfigParser()
        parser.read(filename)
        print(parser.sections())
        screen_width = parser.getint('graphics','width')
        screen_height = parser.getint('graphics','height')
    else:
        print("Config file not found")

if __name__=="__main__":
    main()


来源:https://stackoverflow.com/questions/27012337/python-config-parser-cant-find-section

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!