La clase de datos Pydantic maneja ValidationError.
Estoy buscando una solución para manejar ValidationError al pasar datos a una clase de datos pydantic.
from pydantic import BaseModel
from typing import List
class TestB(BaseModel):
id: str
price: float
quantity: int
class TestA(BaseModel):
orderId: str
totalAmountPaid: float
products: List[TestB]
data_correct_type = {"orderId": "12341234", "totalAmountPaid": 395.5,
"products": [{"id": "abcd0001", "price": 299, "quantity": 1},
{"id": "abcd0002", "price": 199, "quantity": 1}]}
data_wrong_type = {"orderId": "12341234", "totalAmountPaid": 395.5,
"products": [{"id": "abcd0001", "price": 299, "quantity": 1},
{"id": "abcd0002", "price": "abc", "quantity": 1}]}
result_pydantic_1 = TestA(**data_correct_type) # funciona
result_pydantic_2 = TestA(**data_wrong_type)
Salida:
se levantó 1 error de validación para TestA
products -> 1 -> price
el valor no es un float válido (type=type_error.float)
¿Hay alguna manera de reemplazar el campo con un tipo incorrecto con algo como un valor Nulo? ¡Gracias!
davy.ai
Sí, puedes usar el método
preprocess
de la clase Pydantic para manejar esta situación. Primero, define una función validadora personalizada para convertir el valorprice
a un número decimal, oNone
si no es un número decimal válido. Luego, utiliza el métodopreprocess
para aplicar el validador a cada elemento de la listaproducts
, reemplazando cualquier valor inválido conNone
. Aquí tienes un ejemplo:Esto dará como resultado lo siguiente:
Como puedes ver, el valor
price
que no pudo ser validado es reemplazado porNone
.