首页 > 解决方案 > marshmallow-sqlalchemy 给出语法错误

问题描述

在 python 3.5 中安装后marshmallow-sqlalchemy,它向我显示语法错误。

我已经使用以下命令安装它pip install marshmallow-sqlalchemy

Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from app import flask_app
  File "/var/www/html/mswipe-banner/mswipe-banner/app/__init__.py", line 10, in <module>
    from .models import *
  File "/var/www/html/mswipe-banner/mswipe-banner/app/models/__init__.py", line 1, in <module>
    from .banner import *
  File "/var/www/html/mswipe-banner/mswipe-banner/app/models/banner.py", line 1, in <module>
    from .base_model import *
  File "/var/www/html/mswipe-banner/mswipe-banner/app/models/base_model.py", line 1, in <module>
    from flask_marshmallow import Marshmallow
  File "/var/www/html/mswipe-banner/lib/python3.5/site-packages/flask_marshmallow/__init__.py", line 24, in <module>
    from . import sqla
  File "/var/www/html/mswipe-banner/lib/python3.5/site-packages/flask_marshmallow/sqla.py", line 13, in <module>
    import marshmallow_sqlalchemy as msqla
  File "/var/www/html/mswipe-banner/lib/python3.5/site-packages/marshmallow_sqlalchemy/__init__.py", line 1, in <module>
    from .schema import TableSchemaOpts, ModelSchemaOpts, TableSchema, ModelSchema
  File "/var/www/html/mswipe-banner/lib/python3.5/site-packages/marshmallow_sqlalchemy/schema.py", line 3, in <module>
    from .convert import ModelConverter
  File "/var/www/html/mswipe-banner/lib/python3.5/site-packages/marshmallow_sqlalchemy/convert.py", line 80
    ):
    ^
SyntaxError: invalid syntax

谢谢

标签: pythonpython-3.6marshmallowfunction-parameter

解决方案


安装失败,因为 marshmallow-sqlalchemy不再支持Python 3.5。支持 Python 3.5 的最后一个版本是 18.0 版,必须显式安装。

回溯中的特定错误是由此函数声明引起的:

def fields_for_model(
    self,
    model,
    *,
    include_fk=False,
    fields=None,
    exclude=None,
    base_fields=None,
    dict_cls=dict,
):

Python 3.6 包含一个更改,允许在函数参数列表中使用尾随逗号。在此更改之前,这些签名是合法的:

>>> def f(a, b, c=1,):pass
... 
>>> def f(a, b, *, c=1):pass
... 
>>>

但这不是

>>> def f(a, b, *, c=1,):pass
  File "<stdin>", line 1
    def f(a, b, *, c=1,):pass
                       ^
SyntaxError: invalid syntax

参数列表中间的*- 指示仅关键字参数的开始 - 在版本 18 之后添加到上述 marshmallow-sqlalchemy 函数签名中,作为删除 2.7 和 3.5 兼容性过程的一部分。


推荐阅读