代码之家  ›  专栏  ›  技术社区  ›  tobias

元组长度的对偶问题

  •  0
  • tobias  · 技术社区  · 2 年前

    我在pydantic(2.0.3版)中有以下模型

    from typing import Tuple
    from pydantic import BaseModel
    
    class Model(BaseModel):
        test_field: Tuple[int]
    

    但当我进入

    model = Model(test_field=(1,2))
    

    我得到错误:

    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/code.py", line 90, in runcode
        exec(code, self.locals)
      File "<input>", line 1, in <module>
      File "/Users/tobi/Documents/scraiber/z_legacy/fastapi_test_app/venv/lib/python3.10/site-packages/pydantic/main.py", line 150, in __init__
        __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
    pydantic_core._pydantic_core.ValidationError: 1 validation error for Model
    test_field
      Tuple should have at most 1 item after validation, not 2 [type=too_long, input_value=(1, 2), input_type=tuple]
        For further information visit https://errors.pydantic.dev/2.0.3/v/too_long
    

    你知道我该怎么解决吗?

    0 回复  |  直到 2 年前
        1
  •  4
  •   ti7    2 年前

    下列的 @蒂姆·罗伯特 的答案,链接的PR建议使用 Ellipsis ... 就是你想要的语法!

    https://github.com/pydantic/pydantic/pull/512/files

    class Model(BaseModel):
        test_field: Tuple[int, ...]
    
    >>> Model(test_field=(1,2))
    Model(test_field=(1, 2))
    
        2
  •  0
  •   Tim Roberts    2 年前

    不支持可变长度元组。有一个关于它的错误报告。 Sequence 可以用作变通方法。

    https://github.com/pydantic/pydantic/issues/495