Skip to content

Strict Types

Strict types enable you to prevent coercion from compatible types.

Strict types

Pydantic provides the following strict types:

These types will only pass validation when the validated value is of the respective type or is a subtype of that type.

Constrained types

This behavior is also exposed via the strict field of the constrained types and can be combined with a multitude of complex validation rules. See the individual type signatures for supported arguments.

The following caveats apply:

  • StrictBytes (and the strict option of conbytes()) will accept both bytes, and bytearray types.
  • StrictInt (and the strict option of conint()) will not accept bool types, even though bool is a subclass of int in Python. Other subclasses will work.
  • StrictFloat (and the strict option of confloat()) will not accept int.

Besides the above, you can also have a FiniteFloat type that will only accept finite values (i.e. not inf, -inf or nan).

from pydantic import BaseModel, FiniteFloat, StrictInt, ValidationError

class StrictIntModel(BaseModel):
    strict_int: StrictInt

class Model(BaseModel):
    finite: FiniteFloat

except ValidationError as e:
    1 validation error for StrictIntModel
      Input should be a valid integer [type=int_type, input_value=3.14159, input_type=float]
m = Model(finite=1.0)
#> finite=1.0

You can also use pydantic.StringConstraints in Annotated instead of constr for better compatibility with type checkers and more flexibility in nesting within other types:

from typing_extensions import Annotated

from pydantic import BaseModel, StringConstraints, ValidationError

FirstName = Annotated[
    StringConstraints(to_upper=True, pattern=r'[A-Z0-9]{3}-[A-Z0-9]{3}'),

class Model(BaseModel):
    license_plate: FirstName

except ValidationError as e:
    1 validation error for Model
      String should match pattern '[A-Z0-9]{3}-[A-Z0-9]{3}' [type=string_pattern_mismatch, input_value='XYZ', input_type=str]
m = Model(license_plate='ABC-123')
#> license_plate='ABC-123'