2014-04-25 10 views
0

몇 가지 기본 작업을 수행하는 클라이언트로 간단한 RPC 서버를 실행하려고합니다. 모든 것이 제대로 기록 된 것 같다하지만 클라이언트를 실행하려고하면 같은 모양 잘못된 구문 오류 발생 : 나는 확신Python - 이상한 잘못된 구문 오류

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

:이 rpcClient.py 파일입니다

$ python rpcClient.py 
    File "rpcClient.py", line 9 


^ 
SyntaxError: invalid syntax 

을 서버 파일은 문제가되지 않지만 그냥이 경우,이 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() 

문제가 무엇인지 어떤 생각? 반복적으로 클라이언트를 실행 해봤는데 매번 위에서 언급 한 것과 같은 오류가 발생합니다. 파이썬은 다음 빈 다음 줄에 도착하고, 누락 된 닫는 괄호가 어디로 갔는지 궁금

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

:

답변

4

당신은 마지막 줄에 닫는 괄호가 누락되었습니다.

참고 %s 자리 이미 통화는 보간 값에 대한 str(), 당신은 명시 적으로 여기 str()를 호출 할 필요가 없습니다. 대신, 튜플의 값을 포장, 그래서 튜플 proxy.is_even()에서 반환 된 경우 즉, 오직 심지어 보간 한 값으로 해석됩니다 :

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])) 
:

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() 새로운 선호

+0

+1 '형식'이 더 좋습니다. 거기에 너무 많은 오래된 자습서가 있습니다. – SethMMorton

1

마지막 줄에 닫는 괄호가 없습니다. 그러나 %s 형식 지정 옵션이 해당 인수를 문자열로 자동 변환하기 때문에 str을 호출 할 필요가 없습니다. 따라서 필요한 것은 다음과 같습니다.

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

감사합니다. 자바라면, 나는 믿을 수 없을 정도로 세심한 생각을 가지고 있습니다. 그러나 저는 여전히 Python을 처음 접했기 때문에 오류가 발생하기 쉽습니다. – user3521737