2014-04-25 167 views
0

我試圖運行一個簡單的RPC服務器與執行一些基本操作的客戶端。一切似乎都正確無誤,但嘗試運行的客戶端產生一個看起來像一個無效的語法錯誤:Python - 奇怪的無效語法錯誤

$ 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() 

的問題是什麼你知道嗎?我嘗試過反覆運行客戶端,並且每次都收到上面提到的同樣的錯誤。

回答

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])) 
+0

+1提到「格式」更好。那裏有太多的老教程。 – SethMMorton

1

您在最後一行缺少右括號。但是,調用str是不必要的,因爲%s格式化選項會自動將其參數轉換爲字符串。所以,你需要的只是這個:

print "Sum of all numbers from 1 to 5: %s" % proxy.sumList([1, 2, 3, 4]) 
+0

謝謝。如果它是Java,我會非常細緻,但是由於我對Python還是比較新的,所以很容易出錯。 – user3521737