Как определить "NoSuchObject" в Python?

В настоящее время я работаю над модулем SNMP в Python 3 (Python 3.1.3) на основе PySnmp для простой отправки запросов GET/WALK SNMP из других программ. Это в основном для развлечения / обучения.

При запросе существующего OID я получаю кортеж, такой как:

(ObjectName(1.3.6.1.2.1.1.7.0), Integer(72))

который я могу прочитать, используя конструкцию "для".

Однако, при запросе несуществующего OID (что я и делаю для модульного тестирования), я получаю:

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

Как я могу дифференцировать "нормальный" случай, когда 2-й элемент кортежа - это целое число / строка /(другое?), И "ошибочный" случай, когда этот 2-й элемент является "NoSuchObject"?

2 ответа

Решение

Как здесь определить тип объекта?

type(your_tuple[1]) == NoSuchObject

или же

isinstance(your_tuple[1], NoSuchObject)

Другой подход заключается в сопоставлении типов ASN.1 объекта noSuchObject и части значения кортежа var-bind ответа SNMP:

>>> 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
Другие вопросы по тегам