首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >棉花糖NewType不能转化为数据集,python3.10

棉花糖NewType不能转化为数据集,python3.10
EN

Stack Overflow用户
提问于 2022-09-27 15:13:22
回答 1查看 75关注 0票数 0

我正在升级到python 3.10,在这种情况下,我认为最好也升级使用的包。现在,问题在于棉花糖包,此时我甚至无法运行它们的NewType示例代码。

这是我的代码(摘自NewType定义中的注释):

代码语言:javascript
复制
from marshmallow_dataclass import NewType, dataclass, List
import marshmallow.validate
IPv4 = NewType('IPv4', str, validate=marshmallow.validate.Regexp(r'^([0-9]{1,3}\\.){3}[0-9]{1,3}$'))

@dataclass
class MyIps:
   ips: List[IPv4]

MyIps.Schema().load({"ips": ["0.0.0.0", "grumble grumble"]})

我只添加了第一行,以获得必要的命令。

当我运行它时,我会收到以下错误消息:

代码语言:javascript
复制
/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py:373: UserWarning: ****** WARNING ****** marshmallow_dataclass was called on the class <function NewType.<locals>.new_type at 0x7fb5a077fd90>, which is not a dataclass. It is going to try and convert the class into a dataclass, which may have undesirable side effects. To avoid this message, make sure all your classes and all the classes of their fields are either explicitly supported by marshmallow_dataclass, or define the schema explicitly using field(metadata=dict(marshmallow_field=...)). For more information, see https://github.com/lovasoa/marshmallow_dataclass/issues/51 ****** WARNING ******
warnings.warn(
Traceback (most recent call last):
File "/usr/lib/python3.10/dataclasses.py", line 1197, in fields
    fields = getattr(class_or_instance, _FIELDS)
AttributeError: 'function' object has no attribute '__dataclass_fields__'. Did you mean: '__dataclass_params__'?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 370, in _internal_class_schema
    fields: Tuple[dataclasses.Field, ...] = dataclasses.fields(clazz)
File "/usr/lib/python3.10/dataclasses.py", line 1199, in fields
    raise TypeError('must be called with a dataclass type or instance')
TypeError: must be called with a dataclass type or instance

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 384, in _internal_class_schema
    created_dataclass: type = dataclasses.dataclass(clazz)
File "/usr/lib/python3.10/dataclasses.py", line 1185, in dataclass
    return wrap(cls)
File "/usr/lib/python3.10/dataclasses.py", line 1176, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash,
File "/usr/lib/python3.10/dataclasses.py", line 909, in _process_class
    for b in cls.__mro__[-1:0:-1]:
AttributeError: 'function' object has no attribute '__mro__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/username/testscript.python", line 9, in <module>
    MyIps.Schema().load({"ips": ["0.0.0.0", "grumble grumble"]})
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/lazy_class_attribute.py", line 33, in __get__
    setattr(cls, self.name, self.func())
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 356, in class_schema
    return _internal_class_schema(clazz, base_schema, clazz_frame)
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 402, in _internal_class_schema
    attributes.update(
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 405, in <genexpr>
    field_for_schema(
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 695, in field_for_schema
    generic_field = _field_for_generic_type(typ, base_schema, typ_frame, **metadata)
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 503, in _field_for_generic_type
    child_type = field_for_schema(
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 729, in field_for_schema
    or _internal_class_schema(typ, base_schema, typ_frame)
File "/home/username/.local/share/virtualenvs/venv_3.10/lib/python3.10/site-packages/marshmallow_dataclass/__init__.py", line 387, in _internal_class_schema
    raise TypeError(
TypeError: IPv4 is not a dataclass and cannot be turned into one.

我现在的安装是python3.10.6和marshmallow_dataclasses 8.5.8。(代码使用python3.9和棉花糖数据8.3.0)是否有人知道为什么会发生这种情况,以及如何解决这个问题(很明显,除了降级之外),还有其他人有这个问题吗?这是一种新的行为吗?我应该调整我们的代码(如果是的话,怎么做?)这是个虫子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-29 15:10:04

在试图升级marshmallow_dataclasses之后,类似的代码也出现了类似的问题,导致了错误。

代码语言:javascript
复制
import dataclasses

import marshmallow_dataclass

ARGON2_PASSWORD = marshmallow_dataclass.NewType(
    "ARGON2_PASSWORD",
    str,
    validate=validate.Regexp(
        r"[$]argon2(?:id|i)[$]v=\d{1,3}[$]m=\d{3,20},t=\d{1,4},"
        r"p=\d{1,2}[$][^$]{1,100}[$][^$]{1,768}"))


@marshmallow_dataclass.add_schema
@dataclasses.dataclass
class Argon2Password:
    password: ARGON2_PASSWORD

详细的根本原因目前已在https://github.com/lovasoa/marshmallow_dataclass/issues/206 afaics中讨论过。

目前,下调到typing-inspect==0.7.1的评级对我来说是个热点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73869940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档