【问题标题】:ignore socket.error in python忽略python中的socket.error
【发布时间】:2014-01-15 14:52:46
【问题描述】:

使用简单的代码从 IP 地址获取主机名。

#!/usr/bin/python
import socket
import os
import sys

try:
        fdes = open ("ip.txt","r")
        for line in fdes.readlines():
                print socket.gethostbyaddr(line)
except Exception:
        pass

例如 ip.txt 有 ip 地址:

10.10.1.10, 10.10.1.20, 10.10.1.30, 10.10.1.40, 10.10.1.50, 10.10.1.60, 10.10.1.70,

没有10.10.1.40的主机名,所以这里代码中断,不再继续,错误是"socket.herror:[errno 1] Unknown Host"

如果主机名不可用作 IP 地址,我如何强制忽略该错误?

【问题讨论】:

  • 通常 try/except 围绕一个关键语句,如果它失败,则跳过其所有块。

标签: python sockets


【解决方案1】:

这会将与主机名相关的代码移动到 try/except 块中,同时保留文件读取内容;因此,如果抛出异常,您的文件读取代码仍将继续。

fdes = open("ip.txt","r")

for line in fdes.readlines():
    try:
        print socket.gethostbyaddr(line)
    except socket.error:
        pass

注意:此代码仅忽略 socket.error 异常,而未处理所有其他异常(因此引发 KeyboardInterrupt 的 Ctrl+C 仍将停止程序。

【讨论】:

  • @Nabla true,但我尽量让我的代码与 OP 的代码尽可能相似。
【解决方案2】:

将代码中的Exception 替换为socket.error

try:
    # Do something with sockets that might throw an error
except socket.error:
    pass # Basically, ignore the error

这将确保您不会无意中忽略代码中的其他错误。

如果你想对错误做点什么,也许记录它,使用这个代码:

try:
    # Operation that might throw a socket error
except socket.error as e:
    print e
    # Do something with the error object

【讨论】:

  • 谢谢,请原谅我的外行写脚本,我应该放什么来代替 # ONLY catch socket errors
猜你喜欢
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2010-12-28
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多