随机出现此错误,有时会出现,有时不会:
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,如果我用字符串转换它?
答案 0 :(得分:5)
您的代码中的某个位置正在执行此操作:
config.set('something', 'something', 0) # or some integer
或者您可以选择在ConfigParser
构造函数dict
中传入非字符串值。
这与文档所说的完全相反:
如果给定的部分存在,请将给定选项设置为指定的选项 值;否则引发NoSectionError。虽然可以使用 RawConfigParser(或原始参数设置为true的ConfigParser) 内部存储非字符串值,完整功能(包括 插值和输出到文件)只能使用字符串来实现 值。强>
因此,每当您致电ConfigParser.set
时,请确保将您在str
设置的内容换行。否则,当它遍历_interpolate
中的所有值时会抛出错误。 (我认为这种行为的某些部分是一个错误,但它可能保持原样以便向后兼容。或者某些东西。)
另一个好处是使用SafeConfigParser
,如果你试图设置一个非字符串值,它会抛出TypeError
,所以你知道这不会再发生。