这是配置文件的片段:
[{u'sequenceNumber': 10, u'text': u'--- 10-999 are broad permits'},
{u'action': u'permit',
u'counterData': {},
u'log': False,
u'payload': {u'payload': []},
u'ruleFilter': {u'destination': {u'ip': u'0.0.0.0', u'mask': 0},
u'dscp': {u'match': False, u'value': 0},
u'dstPort': {u'maxPorts': 10,
u'oper': u'any',
u'ports': []},
u'established': False,
u'fragments': False,
u'gre': {u'protoMask': 0, u'protocol': 0},
u'gtp': {u'teid': 0, u'teidMask': 0},
u'icmp': {u'code': 65535, u'type': 65535},
u'nvgre': {u'protoMask': 0,
u'protocol': 0,
u'tni': 0,
u'tniMask': 0},
u'protocol': 2,
u'source': {u'ip': u'0.0.0.0', u'mask': 0},
u'srcPort': {u'maxPorts': 10,
u'oper': u'any',
u'ports': []},
u'standard': False,
u'tcpFlags': 0,
u'tracked': False,
u'ttl': {u'oper': u'any', u'value': 0},
u'userL4': {u'pattern': 0, u'patternMask': 0},
u'vlan': {u'id': 0,
u'innerId': 0,
u'innerMask': 0,
u'mask': 0},
u'vxlan': {u'vni': 0, u'vniMask': 0, u'vxlanValid': False}},
u'sequenceNumber': 20,
u'text': u'permit igmp any any'},
有问题的代码片段。
因此,我尝试使用KeyError
和NameError
处理程序进行循环,因为输入中的所有行都不具有' src_mk'。
for seq in acl:
try:
src_mk = seq['ruleFilter']['source']['mask']
except (KeyError, NameError):
pass
print src_mk
我得到NameError - name not defined
。我厌倦了单独处理异常,但它没有工作。
Traceback (most recent call last):
File "<stdin>", line 6, in <module>
NameError: name 'src_mk' is not defined
答案 0 :(得分:1)
您需要事先在try-except
块之外定义变量。有关您的代码无效的原因,请参阅评论部分@Daniel Roseman's comment
这一行中的某些内容应该有效:
for seq in acl:
src_mk = None
try:
src_mk = seq['ruleFilter']['source']['mask']
except (KeyError,NameError):
pass
print src_mk # Note that if it is None it means there was an exception