我使用侦听器/客户机模式在两个进程之间通过套接字传输数据。不幸的是,我不知道如何在客户机代码中捕获异常,这发生在侦听器代码中。我想,也许我可以通过简单地通过套接字传输异常来实现这一点,但这是行不通的。你知道吗
这是我的密码:
listener.py
:
#!/usr/bin/env python
from multiprocessing.connection import Listener
import random
class MyException(Exception):
pass
def main():
address = ('localhost', 6000) # family is deduced to be 'AF_INET'
listener = Listener(address, authkey='secret password')
rand = random.randint(1, 101)
while True:
conn = listener.accept()
print 'connection accepted from', listener.last_accepted
msg = conn.recv()
# do something with msg
if msg == 'hello':
try:
raise MyException('Oooops')
except MyException as e:
print 'Sending {}'.format(e.message)
conn.send(e)
# conn.send('Hello world! {}'.format(rand))
elif msg == 'close':
conn.close()
break
listener.close()
if __name__ == '__main__':
main()
client.py
:
#!/usr/bin/env python
from multiprocessing.connection import Client
from listener import MyException
def main():
address = ('localhost', 6000)
conn = Client(address, authkey='secret password')
conn.send('hello')
try:
res = conn.recv()
print res
except MyException as e:
print 'Received error!'
conn.send('close')
conn.close()
if __name__ == '__main__':
main()
客户端中的print语句print 'Received error!'
将永远不会执行。你知道吗
处理错误的正确方法是什么?你知道吗
问题是,调用
conn.send(e)
时,您并没有在侦听器中引发异常,您只是将异常作为普通数据发送(就像您可以发送的任何其他对象一样),而conn.recv()
只是将发送的对象提供给您,这一事实并不重要。处理异常的最简单方法是检查它是否是异常的实例(或派生异常的实例):相关问题 更多 >
编程相关推荐