Python Config Parser找不到部分?

时间:2014-11-19 08:43:42

标签: python pygame configparser

我正在尝试使用ConfigParser为我的pygame游戏读取.cfg文件。我出于某种原因无法使其发挥作用。代码如下所示:

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

此文件中的主要方法在游戏的启动器中调用。我已经测试了它,并且完美无缺。当我运行此代码时,我收到此错误:

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'

问题是,有一个部分'图形'。

我正在尝试阅读的文件如下所示:

[graphics]
height = 600
width = 800

我已经确认它实际上称为options.cfg。 config.sections()仅返回:“[]”

在使用相同的代码之前我已经完成了这项工作,但它现在无法工作。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

可能找不到您的配置文件。在这种情况下,解析器只会生成一个空集。您应该使用对文件的检查来包装代码:

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()

答案 1 :(得分:1)

我总是使用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')

还要确保有一个名为options.cfg的文件,并在需要时指定完整路径,正如我已经评论过的那样。如果没有找到文件,解析器将无提示失败。

答案 2 :(得分:0)

我也面临着同样的问题。我已将项目移到其他位置,并认为它可以正常工作。但是在新位置执行代码后,它找不到我的配置文件并抛出错误:

例外:在database.ini文件中找不到节postgresql_conn_config

解决方案:提供文件的完整路径,并正确放置调试语句以识别问题。下面是我的代码。希望对您有所帮助:

from configparser import ConfigParser
import os


def get_connection_by_config(filename='database.ini',section='postgresql_conn_config'):
'''
    This method will use the connection data saved in configuration file to get postgresql database server connection.

    filename : Is the configuration file saved path, the configuration file is database.ini in this example, and it is saved in the same path of PostgresqlManager.py file.

    section_name : This is the section name in above configuration file. The options in this section record the postgresql database server connection info.

'''

# create a parser
parser = ConfigParser()

# define the file path
loc = '/src/data_engineering/'
cwd = os.path.abspath(os.getcwd()).replace('\\', '/')
path = cwd+loc
filename_ = path+filename
db = {}

#check file path 
if os.path.isfile(filename_):

    # read config file
    parser.read(filename_)

    # get section
    if parser.has_section(section):
        params = parser.items(section)
        for param in params:
            db[param[0]] = param[1]
    else:
        raise Exception('Section {0} not found in the {1} file'.format(section, filename))

else:
    raise Exception("File {} not found in location".format(filename_))

return db