就像捕获SNMP错误一样,如果发生错误,请执行某些操作。
Python代码通过snmphandler软件包获取网络操作系统类型。它可以工作,但是如果SNMP不查询请求,它将超时。我想抓住它并打印“ No SNMP Active”
from nelsnmp.snmp import SnmpHandler
from nelsnmp.errors import ArgumentError, SnmpError
def findnetOS(host):
dev = SnmpHandler(host=host, version='2c', community='public')
hostinfo = HostInfo(dev)
osversion = hostinfo.get_version()
try:
os = hostinfo.os
except ArgumentError as e:
if e.__str__() == "No valid SNMP version defined":
os = None
return os
else:
return os
ostype = findnetOS(host)
if ostype != None:
ostype = "cisco_"+ostype
print ostype
else:
print "No SNMP Active"
exit(-1)
发生错误时,应将预期输出打印为“无SNMP活动”,而在无错误的情况下,应运行ostype进行打印。
我得到的错误:
File "/usr/lib/python2.7/site-packages/nelsnmp/snmp.py", line 210, in _raise_error
raise ErrorType(error_data)
nelsnmp.errors.SnmpError: No SNMP response received before timeout
谢谢你的欣赏
答案 0 :(得分:3)
为ArgumentError
做相同的事情
from nelsnmp.snmp import SnmpHandler
from nelsnmp.errors import ArgumentError, SnmpError
def findnetOS(host):
try:
dev = SnmpHandler(host=host, version='2c', community='public')
hostinfo = HostInfo(dev)
osversion = hostinfo.get_version()
except SnmpError as e:
# handle your error here
pass
try:
os = hostinfo.os
except ArgumentError as e:
if e.__str__() == "No valid SNMP version defined":
os = None
return os
else:
return os
ostype = findnetOS(host)
if ostype != None:
ostype = "cisco_"+ostype
print ostype
else:
print "No SNMP Active"
exit(-1)