我正在进行套接字连接,想要改进异常处理,但是卡住了。每当我使用无效的参数调用socket.connect(server_address)
时,程序会停止运行,但似乎没有引发异常。这是我的代码:
import socket
import sys
import struct
class ARToolkit():
def __init__(self):
self.x = 0
self.y = 0
self.z = 0
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.logging = False
def connect(self,server_address):
try:
self.sock.connect(server_address)
except socket.error, msg:
print "Couldnt connect with the socket-server: %s\n terminating program" % msg
sys.exit(1)
def initiate(self):
self.sock.send("start_logging")
def log(self):
self.logging = True
buf = self.sock.recv(6000)
if len(buf)>0:
nbuf = buf[len(buf)-12:len(buf)]
self.x, self.y, self.z = struct.unpack("<iii", nbuf)
def stop_logging(self):
print "Stopping logging"
self.logging = False
self.sock.close()
这个类看起来可能有些奇怪,但它用于从运行ARToolKit的另一台计算机接收坐标。无论如何,问题出现在函数connect()
中:
def connect(self,server_address):
try:
self.sock.connect(server_address)
except socket.error, msg:
print "Couldnt connect with the socket-server: %s\n terminating program" % msg
sys.exit(1)
如果我使用随机 IP 地址和端口号调用该函数,整个程序将停留在以下行:
self.sock.connect(server_address)
我阅读的文档说明,在出现错误时它会抛出一个socket.error异常。我也尝试过只使用:
except Exception, msg:
如果我没记错的话,这个代码可以捕获所有异常,但它并没有返回任何结果。如果有人能帮忙解决问题,我将不胜感激。另外,当出现意外异常时,使用sys.exit退出程序是否可以接受?
谢谢!