有一个错误我不太确定如何解决,有一个嵌套字典,其中最后一项不包含所要求的 get 并给出错误,不知道如何修复它。
非常基本的代码调用
for keys in interfaces:
counters = interfaces[keys].get(u'interfaceCounters', {})
print keys, "inOctets:", counters.get(u'inOctets', {}), "outOctets:", counters.get(u'outOctets', {})
Run Code Online (Sandbox Code Playgroud)
这是输出:
Management1 inOctets: 0 outOctets: 0
Ethernet2 inOctets: 561926946 outOctets: 49932066
Ethernet3 inOctets: 561926408 outOctets: 49932764
Ethernet1 inOctets: 319314970 outOctets: 264840242
Ethernet6 inOctets: 561897402 outOctets: 49930884
Ethernet7 inOctets: 561678430 outOctets: 50180896
Ethernet4 inOctets: 561927603 outOctets: 49931337
Ethernet5 inOctets: 561926383 outOctets: 49932935
Vlan1 inOctets:
Traceback (most recent call last):
File "ex1.py", line 36, in <module>
print keys, "inOctets:", counters.get(u'inOctets', '0'), "outOctets:", counters.get(u'outOctets', '0')
AttributeError: 'str' object has no attribute 'get'
Run Code Online (Sandbox Code Playgroud)
这是接口的尾端:
u'Management1': {u'autoNegotiate': u'off',
u'bandwidth': 1000000000,
u'burnedInAddress': u'52:54:00:01:02:d3',
u'description': u'',
u'duplex': u'duplexFull',
u'forwardingModel': u'routed',
u'hardware': u'ethernet',
u'interfaceAddress': [],
u'interfaceCounters': {u'inBroadcastPkts': 0,
u'inDiscards': 0,
u'inMulticastPkts': 0,
u'inOctets': 0,
u'inUcastPkts': 0,
u'inputErrorsDetail': {u'alignmentErrors': 0,
u'fcsErrors': 0,
u'giantFrames': 0,
u'runtFrames': 0,
u'rxPause': 0,
u'symbolErrors': 0},
u'linkStatusChanges': 2,
u'outBroadcastPkts': 0,
u'outDiscards': 0,
u'outMulticastPkts': 0,
u'outOctets': 0,
u'outUcastPkts': 0,
u'outputErrorsDetail': {u'collisions': 0,
u'deferredTransmissions': 0,
u'lateCollisions': 0,
u'txPause': 0},
u'totalInErrors': 0,
u'totalOutErrors': 0},
u'interfaceStatistics': {u'inBitsRate': 0.0,
u'inPktsRate': 0.0,
u'outBitsRate': 0.0,
u'outPktsRate': 0.0,
u'updateInterval': 300.0},
u'interfaceStatus': u'disabled',
u'lastStatusChangeTimestamp': 1245724638.6762877,
u'lineProtocolStatus': u'down',
u'mtu': 1500,
u'name': u'Management1',
u'physicalAddress': u'52:54:00:01:02:d3'},
u'Vlan1': {u'bandwidth': 0,
u'burnedInAddress': u'52:54:00:01:37:37',
u'description': u'',
u'forwardingModel': u'routed',
u'hardware': u'vlan',
u'interfaceAddress': [{u'broadcastAddress': u'255.255.255.255',
u'primaryIp': {u'address': u'10.220.88.31',
u'maskLen': 24},
u'secondaryIps': {}}],
u'interfaceStatus': u'connected',
u'lastStatusChangeTimestamp': 1250568992.891673,
u'lineProtocolStatus': u'up',
u'mtu': 1500,
u'name': u'Vlan1',
u'physicalAddress': u'52:54:00:01:37:37'}}
Run Code Online (Sandbox Code Playgroud)
如果您的某些interfaceCounters键引用字符串而不是嵌套字典,只需使用异常处理来忽略它们:
for keys in interfaces:
counters = interfaces[keys].get(u'interfaceCounters', {})
try:
print keys, "inOctets:", counters.get(u'inOctets', {}), "outOctets:", counters.get(u'outOctets', {})
except AttributeError:
# counters is not a dictionary, ignore and move on
pass
Run Code Online (Sandbox Code Playgroud)
这就是请求宽恕的原则;如果您的大多数条目确实具有该.get()方法,则这比跳跃前先看原理要快,在那里您测试该方法是否可用。
| 归档时间: |
|
| 查看次数: |
51190 次 |
| 最近记录: |