python configparser默默挂起

时间:2012-05-10 16:25:01

标签: python configparser

我有一种感觉我是愚蠢的。鉴于此ini文件:

[main]
source1 = ./testing/sdir1
sync1 = ./testing/sydir1
archive1 = ./testing/adir1
source2 = ./testing/sdir2
sync2 = ./testing/sydir2
archive2 = ./testing/adir2
[logging]
log_dir = .
log_file = pixelsync.log
log_level = DEBUG

以下代码挂起:

import ConfigParser

CONFIG_FILE = 'pixelsync.ini'

def parse_config() :
    """read details from the config file"""
    global CONFIG_FILE
    config = ConfigParser.SafeConfigParser()
    config.read(CONFIG_FILE)
    index = 1
    while True :
        if config.has_option('main', 'source' + str(index)) and \
                    config.has_option('main', 'sync' + str(index)) and \
                    config.has_option('main', 'archive' + str(index)) :

            result = ( config.get('main', 'source' + str(index)),
                       config.get('main', 'sync' + str(index)),
                       config.get('main', 'archive' + str(index)))
            index += 1
        else :
            if index == 1 :
                print "could not setup any trios from the config file. exiting."
                sys.exit(1)
    return result

if __name__ == '__main__' :
    options = parse_config()

它依赖于'如果'子句。

如果我更换了' if'条款:

if config.has_option('main', 'source1' ) and \
                    config.has_option('main', 'sync1' ) and \
                    config.has_option('main', 'archive1' ) :

它不会挂起。 (我没有做我想做的事情,因为我需要循环遍历任意数量的三组,但它并没有默默地挂起。

ubuntu 12.04(精确)上的Python v2.7.3,32位。

1 个答案:

答案 0 :(得分:1)

程序挂起的原因是它永远不会脱离循环 - 它会永远持续下去。您需要result,而不是简单地设置return。 (另一种方法是设置它,然后使用break突破循环并返回,但这有点迂回。最好简单地直接返回它。

请注意,执行while True:并且计数不是非常Pythonic,首选方法是使用itertools.count()

E.g:

import itertools

...

for index in itertools.count(1):
    ...

请注意,这表明存在设计缺陷。你可能想知道你是否永远不会得到合适的结果。无限循环通常很糟糕。