2013-04-23 177 views
1

我目前正在使用基於PySnmp的Python 3(Python 3.1.3)中的SNMP模塊來輕鬆發送來自其他程序的GET/WALK SNMP查詢。這主要是爲了好玩/學習。如何識別Python中的「NoSuchObject」?

當查詢現有的OID,我得到一個元組,如:

(ObjectName(1.3.6.1.2.1.1.7.0), Integer(72)) 

,我可以閱讀使用「爲」建設。

但是,查詢不存在的OID時(這是我的單元測試做),我得到:

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

我如何區分「正常」的情況下,其中的第二個元素元組是一個整數/字符串/(其他?)和「錯誤」的情況下,第二個元素是「NoSuchObject」?

回答

1

像這裏Determine the type of an object?

type(your_tuple[1]) == NoSuchObject 

isinstance(your_tuple[1], NoSuchObject) 
+0

當我嘗試這些時,它失敗了: 'NameError:全球名稱'NoSuchObject'未定義' 然後我意識到我的代碼不知道'NoSuchObject'是什麼。它在我做後像一個魅力: 'from pysnmp.proto.rfc1905 import NoSuchObject' 明白了,thx! – Httqm 2013-04-23 21:07:32

0

另一種方法是,以匹配noSuchObject的ASN.1類型和SNMP響應VAR-綁定元組的值部分:

>>> 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