Skip to main content

Human-readable verbose error messages for Pydantic validation errors

Project description

Pydantic Nicer Error Classes

This package returns nicer pydantic errors on over 40+ ValidationError types that are more human readable.

For example, with a json error you might get the following with pydantic:

ValidationError: 1 validation error for User
  Invalid JSON: expected value at line 1 column 25 [type=json_invalid, input_value='{"name": "John", "age": ....com", "addresses": []}', input_type=str]
    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid

This can be hard to read, and unclear to non-technical users. Producing the same error with the package the pydantic-error-handling package becomes much clearer, with clear highlighting of the specific issue.

Invalid JSON at line 1, column 25:
  {"name": "John", "age": invalid, "email": "test@example.com", "addresses": []}
                          ^ expected value

Quick Start

from pydantic import BaseModel
from pydantic_error_handling import verbose_errors

@verbose_errors
class User(BaseModel):
    name: str
    age: int
    email: str

# JSON parsing errors now show visual arrows
bad_json = '{"name": "John", "age": invalid, "email": "test@example.com"}'
try:
    User.model_validate_json(bad_json)
except Exception as e:
    print(e)
    # Invalid JSON at line 1, column 25:
    #   {"name": "John", "age": invalid, "email": "test@example.com"}
    #                           ^ expected value

How to use this package

Option 1: Use @verbose_errors wrapper

  1. install the package to your project using git+https://github.com/scottp2008/pydantic-error-handling.git

  2. Add the decorator verbose_errors to return nicely typed errors:

from pydantic_error_handling import verbose_errors


@verbose_errors
class MyPydanticClass(pydantic.BaseModel):
   ...

note: to produce nice loc functions, this package automatically removes typing and validators from the pattern (e.g function-before, enum etc.). To add additional omissions, you can use the omit_patterns param:

from pydantic_error_handling import verbose_errors


@verbose_errors(omit_patterns=["Problem"])
class MyPydanticClass(pydantic.BaseModel):
   ...

Option 2: Use helper functions to translate errors

  1. install the package to your project using git+https://github.com/scottp2008/pydantic-error-handling.git

  2. generate the relevant pydantic error

  3. pass the error as a NicePydanticError class or string

from pydantic import BaseModel, ValidationError
from pydantic_error_handling import error_to_nice, error_to_string

class MyModel(BaseModel):
    name: str
    age: int

try:
    MyModel(name=123, age="invalid")
except ValidationError as e:
    # Get human-readable string
    print(error_to_string(e))
    # Output: 'name': Input should be a valid string. Received type: int, value: 123
    #         'age': Input should be a valid integer. Received type: str, value: 'invalid'
    
    # Or get structured errors for API/UI
    nice_errors = error_to_nice(e)
    for err in nice_errors:
        print(f"Field: {err.field_path}, Message: {err.message}")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydantic_error_handling-0.1.0.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pydantic_error_handling-0.1.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file pydantic_error_handling-0.1.0.tar.gz.

File metadata

  • Download URL: pydantic_error_handling-0.1.0.tar.gz
  • Upload date:
  • Size: 20.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for pydantic_error_handling-0.1.0.tar.gz
Algorithm Hash digest
SHA256 146763906543f3027974b95495ea09dcd7da7638450fa4a56603f0be17054fb5
MD5 77d5102c4cc8255b58c0f84eacb5bf66
BLAKE2b-256 647d0687bb8f05992f788910af05085578362799224a4ee42c1ad1634aefb908

See more details on using hashes here.

File details

Details for the file pydantic_error_handling-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pydantic_error_handling-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0bbe02b9bdbebbede7155860bceefe434347f9b9f95fbb92c4af75620040f7a1
MD5 db660acc7d86d4161cce35633551de16
BLAKE2b-256 aca481a0619f2c970ee51e7b355697e3c487fcd4f1fccf87101cb052cf91949e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page