【问题标题】:python - problems handling exception and continuingpython - 处理异常和继续的问题
【发布时间】:2013-09-11 17:52:45
【问题描述】:

我正在构建或尝试构建一个 python 脚本,该脚本使用 wmi python 模块检查特定程序的 IP 地址列表 (ips.txt)。但是,无论我如何处理没有运行 RPC 服务的资产的异常,脚本都会因错误而停止运行。我正在使用 python 2.7.5

我可以捕获并传递错误以继续吗? 我可以捕获错误并打印或返回 ip 不活动或 rpc 未运行的说明吗?

提前谢谢你

这是我的代码:

import wmi
list = open("ips.txt")

for line in list.readlines():
    asset = line.strip('\n')
    c = wmi.WMI(asset)
    try:
        for process in c.Win32_Process (name="SbClientManager.exe"):
            print asset, process.ProcessId, process.Name
    except Exception:
        pass

我已尝试以多种方式处理异常以继续解析我的列表,但脚本继续出现以下错误:

    Traceback (most recent call last):
  File ".\check_service.py", line 12, in <module>
    c = wmi.WMI(asset)
  File "C:\Python27\lib\site-packages\wmi.py", line 1290, in connect
    handle_com_error ()
  File "C:\Python27\lib\site-packages\wmi.py", line 241, in handle_com_error
    raise klass (com_error=err)
wmi.x_wmi: <x_wmi: Unexpected COM Error (-2147023174, 'The RPC server is unavailable.', None, None)>

最终,我只是想继续执行脚本并捕获错误。也许说明 IP 没有响应的说明会有所帮助。以下是我尝试过的异常示例:

except Exception:
    sys.exc_clear()

except:
    pass

except wmi.x_wmi, x:
    pass

【问题讨论】:

    标签: python python-2.7 exception-handling


    【解决方案1】:

    您粘贴的回溯表明错误在c = wmi.WMI(asset) 行中。您需要将该行放在 try 块内。

    像这样:

    import wmi
    list = open("ips.txt")
    bad_assets = []
    
    for line in list.readlines():
        asset = line.strip('\n')
        try:
            c = wmi.WMI(asset)
            for process in c.Win32_Process (name="SbClientManager.exe"):
                print asset, process.ProcessId, process.Name
        except Exception:
            bad_assets.append(asset)
    

    另外,建议尝试捕获正确的异常。

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 2019-09-05
      • 2010-09-13
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多