我正在尝试使用执行一些基本操作的客户端运行一个简单的RPC服务器。似乎所有内容都已正确写入,但尝试运行客户端会产生无效的语法错误,如下所示:
$ python rpcClient.py
File "rpcClient.py", line 9
^
SyntaxError: invalid syntax
这是rpcClient.py文件:
import xmlrpclib
proxy = xmlrpclib.ServerProxy("http://localhost:7999/")
print "3 is even: %s" % str(proxy.is_even(3))
print "100 is even: %s" % str(proxy.is_even(100))
proxy.printString("Testing")
proxy.doubleList([1, 2, 4, 8])
print "Sum of all numbers from 1 to 5: %s" % str(proxy.sumList([1, 2, 3, 4])
我很确定服务器文件不是问题,但是以防万一,这是rpcServer.py:
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
def is_even(n):
return n%2 == 0
def printString(s):
print s
return
def doubleList(l):
for i in range(l):
l[i] = l[i]*2
print l[i]
return
def sumList(l):
s = sum(l)
return s
server = SimpleXMLRPCServer(("localhost", 7999))
print "Listening on port 7999..."
server.register_function(is_even, "is_even")
server.register_function(printString, "printString")
server.register_function(doubleList, "doubleList")
server.register_function(sumList, "sumList")
server.serve_forever()
知道问题是什么?我已经尝试重复运行客户端,每次都会遇到上面提到的相同错误。
答案 0 :(得分:4)
您在最后一行缺少右括号:
print "Sum of all numbers from 1 to 5: %s" % str(proxy.sumList([1, 2, 3, 4])
# ----^ -----^
然后Python到达下一行,为空,并且想知道缺少右括号的位置。
请注意,%s
占位符已对您的插值调用str()
,您无需在此明确调用str()
。相反,将值包装在一个元组中,这样即使从proxy.is_even()
返回一个元组,也只会被解释为一个要插值的值:
print "3 is even: %s" % (proxy.is_even(3),)
print "100 is even: %s" % (proxy.is_even(100),)
# ..
print "Sum of all numbers from 1 to 5: %s" % (proxy.sumList([1, 2, 3, 4]),)
就个人而言,我更喜欢较新的str.format()
:
print "3 is even: {}".format(proxy.is_even(3))
print "100 is even: {}".format(proxy.is_even(100))
# ..
print "Sum of all numbers from 1 to 5: {}".format(proxy.sumList([1, 2, 3, 4]))
答案 1 :(得分:1)
您在最后一行缺少右括号。但是,调用str
是不必要的,因为%s
格式化选项会自动将其参数转换为字符串。所以,你需要的只是:
print "Sum of all numbers from 1 to 5: %s" % proxy.sumList([1, 2, 3, 4])