Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

299
Visualizações
El validador Pydantic no funciona como se esperaba

Recientemente descubrí el poder de los validadores de Pydantic y procedí a usarlos en uno de mis proyectos personales.

Sin embargo, encontré un problema: la falla de un validador no detiene la ejecución de los siguientes validadores, lo que genera una excepción.

 class Field(BaseModel): name: constr(min_length=1, max_length=32) type: constr(min_length=1, max_length=32) length: Optional[int] nullable: bool class Unique(BaseModel): name: constr(min_length=1, max_length=32) unique_fields: List[constr(min_length=1, max_length=32)] class Resource(BaseModel): name: constr(min_length=1, max_length=32) table_name: constr(min_length=1, max_length=32) fields: List[Field] primary_key: constr(min_length=1, max_length=32) uniques: Optional[List[Unique]] @validator('name') def resource_name_must_be_pure_string(cls, v): if not v.isalpha(): raise ValueError(ONLY_ALPHA_ERR.format("Resource name")) return v @validator('table_name') def table_name_must_be_pure_string(cls, v): if not v.isalpha(): raise ValueError(ONLY_ALPHA_ERR.format("Table name")) return v @validator('fields', pre=True) def field_name_must_be_pure_string(cls, v): fieldnames = [field["name"] for field in v] print(fieldnames) for fieldname in fieldnames: if not fieldname.replace('_', '').isalpha(): print('was here') raise ValueError("A field's name can only contain alphabetic characters and '_'.") return v @validator('primary_key') def primary_key_must_be_in_fields(cls, v, values): fieldnames = [field.name for field in values["fields"]] if v not in fieldnames: raise ValueError(f"Primary key `{v}` should be one of the input fields.") return v

El método field_name_must_be_pure_string imprime "estuvo aquí", por lo tanto, se debería haber generado la excepción ValueError, pero la ejecución continúa con el siguiente validador, que sería primary_key_must_be_in_fields , que falla porque la lista de campos anterior no era válida.

¿Cuál sería la solución a este caso de la esquina?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Respuesta tardía, pero logró evitar un bloqueo usando lo siguiente:

 @validator('primary_key') def primary_key_must_be_in_fields(cls, v, values): if "fields" not in values: return fieldnames = [field.name for field in values["fields"]] if v not in fieldnames: raise ValueError(f"Primary key `{v}` should be one of the input fields.") return v

Me tomó un tiempo darme cuenta de que Pydantic hará todas las validaciones y no se detendrá en la primera excepción.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda