Python 3.6
所有调试输出均来自PyCharm 2017.1.2
我有一个正在处理一个漏洞的程序。
以下是我遇到问题的部分:
def striplist(errlist):
return [item.strip() for item in errlist]
for line in shintlist:
errors_list = striplist(line.split(","))
errRegex = re.compile(r'(\d+)(\s)(\D+)')
errdict = {}
for elem in errors_list:
mo = errRegex.search(elem)
errdict[mo.group(3)] = int(mo.group(1))
if int(mo.group(1)) > 0:
print("There are errors")
else:
print("There are no errors")
print(errdict)
**注意**打印报表仅供我此时使用 检查程序逻辑。它们将在稍后删除。
执行这些说明时,' shintlist' 是逗号分隔字符串的列表。
__len__ = {int} 9
0 = {str} ' 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored'
1 = {str} ' 0 watchdog'
2 = {str} ' 0 input packets with dribble condition detected'
3 = {str} ' 5912 packets output, 738736 bytes, 0 underruns'
4 = {str} ' 0 output errors, 0 collisions, 2 interface resets'
5 = {str} ' 4 unknown protocol drops'
6 = {str} ' 0 babbles, 0 late collision, 0 deferred'
7 = {str} ' 0 lost carrier, 0 no carrier'
8 = {str} ' 0 output buffer failures, 0 output buffers swapped out'
以上代码有效。它正确分裂了','然后剥离 离开白色空间。然后它创建一个字典键:值 输入errdict {}:
errdict = {dict} {'input errors': 0}
__len__ = {int} 1
'input errors' (64451912) = {int} 0
我陷入困境的是:每次迭代时,errdict {}都会被覆盖 使用来自' shintlist'。
的下一行我想做的是:
如果每个单个项目的每个值都为零(0): if int(mo.group(1))> 0: 然后跳过这个界面。如果任何一个值大于零则 我想要字典' errdict {}'包含以上所有行 来自' shintlist'所以我有一个包含所有内容的字典。
**注2 **这些条目:5912包输出,738736字节,将始终 对于活动接口,它不为零。我稍后会处理这些问题。
当' shintlist'中的每一行时,这些行中的每一行都是errdict {}的状态。 处理完毕:
{'input errors': 0, 'CRC': 0, 'frame': 0, 'overrun': 0, 'ignored': 0}
{'watchdog': 0}
{'input packets with dribble condition detected': 0}
{'packets output': 6304, 'bytes': 786190, 'underruns': 0}
{'output errors': 0, 'collisions': 0, 'interface resets': 2}
{'unknown protocol drops': 4}
{'babbles': 0, 'late collision': 0, 'deferred': 0}
{'lost carrier': 0, 'no carrier': 0}
{'output buffer failures': 0, 'output buffers swapped out': 0}
如果有任何单个值,我想要一个包含所有行和值的字典 非零,所以我可以打印一个显示所有接口有错误的报告。
除非我离开,否则我会问如何追加每一行 errdict {}而不是覆盖?
谢谢。
答案 0 :(得分:0)
问题在于第9行示例代码 - 您在errdict
循环的每次迭代中将for line...
重新初始化为空字典。您希望在该循环的顶部初始化它,即在示例代码的第3行初始化它。