Python - 奇怪的无效语法错误

时间:2014-04-25 19:32:30

标签: python syntax-error

我正在尝试使用执行一些基本操作的客户端运行一个简单的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 个答案:

答案 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])