Python捕获运行时错误类型

时间:2019-05-16 16:36:04

标签: python try-catch

就像捕获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

谢谢你的欣赏

1 个答案:

答案 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)
相关问题