【发布时间】:2014-08-22 13:07:21
【问题描述】:
我有一个套接字连接正在进行,我想改进异常处理,但我被卡住了。每当我使用无效参数调用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-exception。我也试过了:
except Exception, msg:
如果我没记错的话,这会捕获任何异常,但它仍然不会产生任何结果。我将非常感谢您的帮助。另外,当出现不需要的异常时,是否可以使用 sys.exit 退出程序?
谢谢
【问题讨论】:
-
你如何开始你的程序?你确定你的打印不会进入 /dev/null 之类的吗?还有一些异常从 BaseException 继承,所以如果你真的很绝望,你也可以尝试捕捉它(这包括 sys.exit 和键盘中断)