来自配置解析器的python字典,如果值和值中的“%(”:“int”类型的参数不可迭代

时间:2014-01-31 16:12:44

标签: python config configparser

随机出现此错误,有时会出现,有时不会:

for i in range(1,32):
    sezione = "GRP"+str(i)
    dizionarioGRP = dict(config.items(sezione))
    print int(dizionarioGRP['r'])

这是错误

  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/pi/gigi.py", line 436, in run
    self.esegui()
  File "/home/pi/gigi.py", line 307, in esegui
    L.gruppo(idgruppo)
  File "/home/pi/gigi1.py", line 282, in gruppo
    dizionarioGRP = dict(config.items(sezione))
  File "/usr/lib/python2.7/ConfigParser.py", line 655, in items
    for option in options]
  File "/usr/lib/python2.7/ConfigParser.py", line 663, in _interpolate
    if value and "%(" in value:
TypeError: argument of type 'int' is not iterable

为什么它引用为int,如果我用字符串转换它?

1 个答案:

答案 0 :(得分:5)

您的代码中的某个位置正在执行此操作:

config.set('something', 'something', 0) # or some integer

或者您可以选择在ConfigParser构造函数dict中传入非字符串值。

这与文档所说的完全相反:

  

如果给定的部分存在,请将给定选项设置为指定的选项   值;否则引发NoSectionError。虽然可以使用   RawConfigParser(或原始参数设置为true的ConfigParser)   内部存储非字符串值,完整功能(包括   插值和输出到文件)只能使用字符串来实现   值。

因此,每当您致电ConfigParser.set时,请确保将您在str设置的内容换行。否则,当它遍历_interpolate中的所有值时会抛出错误。 (我认为这种行为的某些部分是一个错误,但它可能保持原样以便向后兼容。或者某些东西。)

另一个好处是使用SafeConfigParser,如果你试图设置一个非字符串值,它会抛出TypeError,所以你知道这不会再发生。