You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用Spyne框架时触发SyntaxError错误,求解决方案

解决Spyne框架运行时的SyntaxError问题

看起来你碰到了Spyne与Python版本不兼容的问题,我来帮你拆解一下:

问题回顾

你编写的SOAP服务代码逻辑本身没问题,但运行时触发了语法错误,错误指向Spyne库内部的参数写法。

你的代码

#!/usr/bin/env python
from spyne import Application, rpc, ServiceBase, Unicode
from lxml import etree
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
# Wsgi это Web server Getewap Interface - стандар взаимодействия с питон программой и серверо где он работает
class Soap(ServiceBase):
    @rpc(Unicode, _return=Unicode)
    def Insoap(ctx, words):
        print("Connection detected: ", etree.tostring(ctx.in_document))
        ww = str(words).capitalize()
        return ww

app = Application([Soap], tns='Capitalize', in_protocol=Soap11(validator='lxml'), out_protocol=Soap11())
application = WsgiApplication(app)
# Важна названия переменной, иначе сервер не поймет
if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    server = make_server('localhost', 8002, application)
    server.serve_forever()

报错信息

Traceback (most recent call last):
  File "C:/Users/David374/PycharmProjects/untitled8/venv/test.py", line 3, in <module>
    from spyne import Application, rpc, ServiceBase, Iterable, UnsignedInteger, \
  File "C:\Users\David374\PycharmProjects\untitled8\venv\lib\site-packages\spyne\__init__.py", line 63, in <module>
    from spyne.server import ServerBase, NullServer
  File "C:\Users\David374\PycharmProjects\untitled8\venv\lib\site-packages\spyne\server\__init__.py", line 23, in <module>
    from spyne.server.null import NullServer
  File "C:\Users\David374\PycharmProjects\untitled8\venv\lib\site-packages\spyne\server\null.py", line 69
    self.service = _FunctionProxy(self, self.app, async=False)
                                                         ^
SyntaxError: invalid syntax

问题原因

这个错误的核心是你安装的Spyne版本与当前Python版本不兼容:
从Python 3.5开始,async成为了保留关键字,不能直接用作函数参数名。但你安装的Spyne版本在内部代码中使用了async=False这样的写法,这在Python 3.5+中会直接触发语法错误(因为async是关键字,不能当作参数名使用)。

解决方案

有两种可行的解决办法:

1. 降级Spyne到兼容的旧版本

安装一个不使用async作为参数名的旧版Spyne,比如2.14.x系列,这是最后一批兼容Python 3.5+且避免关键字冲突的稳定版本。执行以下命令:

pip install spyne==2.14.0

安装完成后,重新运行你的代码,语法错误应该就会消失。

2. 临时修改Spyne内部代码(不推荐)

如果你不想降级,可以手动修改Spyne库的null.py文件:找到报错的那一行,把async改成async_,同时确保_FunctionProxy函数的参数定义也对应改成async_。不过这种方法需要修改库文件,后续更新Spyne时会被覆盖,所以仅作为临时应急方案。

另外,注意到你的导入语句里写了from spyne import Application, rpc, ServiceBase, Iterable, UnsignedInteger, \,但实际代码中只用到了Application, rpc, ServiceBase, Unicode,建议删掉多余的导入项,避免潜在的依赖问题。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:42:57