【发布时间】:2011-06-09 11:01:22
【问题描述】:
我不知道我在这里做错了什么,我写了一个 RPC 客户端试图连接到一个不存在的服务器,我正在尝试处理抛出的异常,但不管我尝试了什么我无法弄清楚我应该如何处理这个:
def _get_rpc():
try:
a = ServerProxy('http://dd:LNXFhcZnYshy5mKyOFfy@127.0.0.1:9001')
a = a.supervisor
return a
except:
return False
rpc = _get_rpc()
if not rpc:
print "No RPC"
由于没有服务器在运行,我希望输出为“No RPC”,但我得到了一个异常:
Traceback (most recent call last):
File "xmlrpctest.py", line 20, in <module>
if not rpc:
File "/usr/lib/python2.6/xmlrpclib.py", line 1199, in __call__
return self.__send(self.__name, args)
File "/usr/lib/python2.6/xmlrpclib.py", line 1489, in __request
verbose=self.__verbose
File "/usr/lib/python2.6/xmlrpclib.py", line 1235, in request
self.send_content(h, request_body)
File "/usr/lib/python2.6/xmlrpclib.py", line 1349, in send_content
connection.endheaders()
File "/usr/lib/python2.6/httplib.py", line 908, in endheaders
self._send_output()
File "/usr/lib/python2.6/httplib.py", line 780, in _send_output
self.send(msg)
File "/usr/lib/python2.6/httplib.py", line 739, in send
self.connect()
File "/usr/lib/python2.6/httplib.py", line 720, in connect
self.timeout)
File "/usr/lib/python2.6/socket.py", line 561, in create_connection
raise error, msg
socket.error: [Errno 111] Connection refused
【问题讨论】:
-
_get_rpc 返回对未连接的 ServerProxy 的主管方法的引用。异常没有发生在你处理它的_get_rpc调用中;当您尝试评估此主管方法时(在“如果不是 rpc”中),就会发生这种情况。从交互式提示中尝试:- xmlrpclib.ServerProxy("127.0.0.1") ->
- xmlrpclib.ServerProxy("127.0.0.1").supervisor -> 异常 - foo = xmlrpclib.ServerProxy("127.0.0.1") -> 没有 - dir(foo) -> 你可以看看这个对象是如何设置的 - foo -> 评估时出现相同的异常,它会调用方法 -
现在更有意义了,谢谢。
-
@metamat:如果您将其转换为答案,@Anthony 可以将其选为正确的。 @Anthony,如果他不回应,就偷那个答案(或者我会)。
标签: python exception-handling xml-rpc xmlrpclib