忽略python中的socket.error

时间:2014-01-15 14:52:47

标签: python sockets

使用简单的代码从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]未知主机”

如果主机名不能用作IP地址,我怎么能强行忽略错误?

2 个答案:

答案 0 :(得分: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仍会停止程序)。

答案 1 :(得分:1)

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