2

我目前正在开发基于 PySnmp 的 Python 3 (Python 3.1.3) 中的 SNMP 模块,以便轻松地从其他程序发送 GET/WALK SNMP 查询。这主要是为了娱乐/学习。

查询现有 OID 时,我得到一个元组,例如:

(ObjectName(1.3.6.1.2.1.1.7.0), Integer(72))

我可以使用“for”结构阅读。

但是,当查询一个不存在的 OID(这是我为单元测试所做的)时,我得到:

(ObjectName(2.3.4.5.6.7.8), NoSuchObject('b'''))

如何区分元组的第二个元素是整数/字符串/(其他?)的“正常”情况和第二个元素是 'NoSuchObject' 的“错误”情况?

4

2 回答 2

1

另一种方法是匹配 ASN.1 类型的 noSuchObject 和 SNMP 响应 var-bind 元组的值部分:

>>> from pysnmp.proto import rfc1905
>>> rfc1905.noSuchObject.isSameTypeWith(rfc1905.noSuchObject)
True
>>> rfc1905.noSuchObject.isSameTypeWith(rfc1905.noSuchInstance)
False
>>> rfc1905.noSuchObject.isSameTypeWith(varBind[1]) # varBind from SNMP response
False
于 2013-04-24T05:53:31.097 回答
1

像这里确定一个对象的类型?

type(your_tuple[1]) == NoSuchObject

或者

isinstance(your_tuple[1], NoSuchObject)
于 2013-04-23T20:35:04.297 回答