Python - 奇怪的语法错误
我正在尝试运行一个简单的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()
你知道问题出在哪里吗?我已经多次尝试运行客户端,每次都得到我上面提到的同样错误。
2 个回答
1
你在最后一行缺少一个右括号。不过,调用 str
其实是多余的,因为 %s
格式化选项会自动把它的参数转换成字符串。所以,你只需要这样写:
print "Sum of all numbers from 1 to 5: %s" % proxy.sumList([1, 2, 3, 4])
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]))