2

環境に精通するために、数値のリスト(具体的にはnumpyまたはpythonのリスト)を送信し、xml-rpcを使用してそれらの合計を取得しようとしています。クライアント側で常にエラーが発生します。

<Fault 1: "<type 'exceptions.TypeError'>:unsupported operand type(s) for +: 'int' and 'list'">

サーバー側のコード:

from SimpleXMLRPCServer import SimpleXMLRPCServer
def calculateOutput(*w):
    return sum(w);

server = SimpleXMLRPCServer(("localhost", 8000))
print "Listening on port 8000..."
server.register_function(calculateOutput,"calculateOutput");
server.serve_forever()

クライアント側のコード:

import xmlrpclib
proxy = xmlrpclib.ServerProxy("http://localhost:8000/")
print(proxy.calculateOutput([1,2,100]);

誰かがこの問題を解決する方法を知っていますか?

4

1 に答える 1

4

proxy.calculateOutput([1,2,100])として送信するproxy.calculateOutput(1,2,100)か、サーバー側関数の引数をからに変更しdef calculateOutput(*w):ますdef calculateOutput(w):

余談ですが、セミコロンは必要ありません。

この動作の理由は、簡単な例で説明できます

>>> def a(*b):
>>>    print b

>>> a(1,2,3)
(1, 2, 3)
>>> a([1,2,3])
([1, 2, 3],)

出力からわかるように、マジックアステリックスを使用すると、関数に渡す多くの引数がタプル自体としてパッケージ化されるためn、引数の量を処理できます。その構文を使用していたので、すでにリストに含まれている引数を送信すると、それらはさらにタプルにパッケージ化されました。sum()引数としてリスト/タプルのみを想定しているため、含まれているリストを合計しようとしたときに受け取ったエラー。

于 2012-06-06T14:02:21.080 に答える