我不知道我在这里做错了什么,我写了一个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"
由于没有服务器运行,我希望输出为“无RPC”,但我得到一个例外:
Traceback (most recent call last):
File "xmlrpctest.py",line 20,in
最佳答案
_get_rpc返回对未连接的ServerProxy的supervisor方法的引用.在您处理它的_get_rpc调用中没有发生异常;当你试图评估这个supervisor方法时(在“if not rpc”中),它就会发生.尝试从交互式提示:
Python 2.6.5 (r265:79063,Apr 16 2010,13:57:41)
[GCC 4.4.3] on linux2
Type "help","copyright","credits" or "license" for more information.
>>> import xmlrpclib
>>> xmlrpclib.ServerProxy("http://127.0.0.1");
404 Not Found>
>>> foo = xmlrpclib.ServerProxy("http://127.0.0.1");
>>> dir (foo)
['_ServerProxy__allow_none','_ServerProxy__encoding','_ServerProxy__handler','_ServerProxy__host','_ServerProxy__request','_ServerProxy__transport','_ServerProxy__verbose','__doc__','__getattr__','__init__','__module__','__repr__','__str__']
>>> foo.supervisor
Traceback (most recent call last):
File "404 Not Found>
>>> bar = foo.supervisor
>>> bar
Traceback (most recent call last):
File "404 Not Found>
请注意在尝试评估.supervisor方法(ServerProxy(…).supervisor,foo.supervisor或bar)时如何看待异常,而不是在将其分配到别处时(bar = foo.supervisor).