Skip to main content

everyone makes mistakes, show the errors to them

Project description

human errors

humans do make some errors, so we should show it to them, so that it can be fixed

usage:

json/orjson

from human_errors import json_dump
import orjson

try:
  with open("config.json", "r") as file:
    config = orjson.loads(file.read())
except orjson.JSONDecodeError as exc:
  json_dump(exc, "config.json")

Output (error):

    --> C:\Users\<user>\absolute\path\to\config.json:19:5
  17        "path": "$DESKTOP"
  18      }
╭╴19      {         ↑
│ 20        "name": "Pictures",
│ 21        "path": "$PICTURES"
╰────❯ unexpected character

tomllib (>=3.14) or toml

if you want to use tomllib, python >= 3.14 must be used so that the message and line + column numbers can be extracted.

from human_errors import toml_dump
import toml
try:
  with open("pyproject.toml", "r") as file:
    config = toml.loads(file.read())
except toml.TomlDecodeError as exc:
  toml_dump(exc, "pyproject.toml")

Output (error):

    --> C:\Users\<user>\path\to\pyproject.toml:9:26
   7      { name = "<name>", email = "<email>" }
   8  ]
╭╴ 9  requires-python = ">=3.12
│    │                          ↑
│ 10 │ dependencies = [
│ 11 │     "rich>=14.2.0",
╰────❯ Unbalanced quotes

pyyaml

from human_errors import yaml_dump
import yaml

try:
  with open("config.yaml", "r") as file:
    config = yaml.safe_load(file.read())
except yaml.YAMLError as exc:
  yaml_dump(exc, "config.yaml")

Output (error):

    --> C:\Users\<user>\absolute\path\to\config.yaml:5:3
  3    name: "John"
  4    age: 30
╭╴5    email: john@example.com
│             ↑
│ 6      - item1
│ 7      - item2
╰────❯ mapping values are not allowed here

Base Renderer (Custom Errors)

For custom error handling or any file-based errors not covered by the built-in renderers:

from human_errors.base_renderer import dump

def validate_config(file_path: str):
    with open(file_path, "r") as f:
        for line_num, line in enumerate(f, start=1):
            if "TODO" in line:
                col = line.index("TODO") + 1
                dump(
                    doc_path=file_path,
                    cause="TODO found in production config",
                    line_number=line_num,
                    column_number=col,
                    context=3,
                    extra=[
                        "Production configs should not contain TODO items",
                        "Please replace with actual values or remove this entry"
                    ]
                )
                exit(1)

Output (error):

     --> C:\Users\<user>\absolute\path\to\config.py:15:9
  12  DATABASE_HOST = "localhost"
  13  DATABASE_PORT = 5432
  14 │
╭╴15  API_KEY = "TODO: add production key"                ↑
│ 16 │
│ 17  CACHE_ENABLED = True
│ 18  CACHE_TTL = 3600
╰─────❯ TODO found in production config
    ╭───────────────────────────────────────────────────────────╮
     Production configs should not contain TODO items              ├───────────────────────────────────────────────────────────┤
     Please replace with actual values or remove this entry        ╰───────────────────────────────────────────────────────────╯

alternate styling

if you dont like human-error's default styling, a miette like version is also available

   ╭─[/path/to/file.json:2:19]
 1  {
 2    "name": "Alice",,
   ·                      ·                   ╰─❯ Expecting property name enclosed in double quotes
 3    "age": 30
   ╰────

CLI Tool

A command-line interface is provided to parse files and render errors:

uvx human-errors path/to/file.[json|toml|yaml|yml] [--renderer default|miette]
  • Automatically detects format from file extension
  • On parse errors, uses human_errors' renderer for neater output
  • Optional --renderer selects the output style

Example:

uvx human-errors examples/bad.json

contributing

any extra data format must be in an extra, and also available in the all group

any contributions must pre-lint with ruff and ty

uv run ruff check --unsafe-fixes --fix
uv run ty check

adding support for pytest is also fine

( ̄︶ ̄)↗ give a star

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

human_errors-0.0.3.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

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

human_errors-0.0.3-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file human_errors-0.0.3.tar.gz.

File metadata

  • Download URL: human_errors-0.0.3.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for human_errors-0.0.3.tar.gz
Algorithm Hash digest
SHA256 a89e9b6725a2bbd1978957aa90e7aed31383d50d8e4103306779e1d3dee3c7c3
MD5 9e32757316b91eb039cd26b012b062e6
BLAKE2b-256 9860ce802070d53b3ddd53a7447c97a8af452d9e17b3e9ba71493836ce2c7b84

See more details on using hashes here.

File details

Details for the file human_errors-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: human_errors-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for human_errors-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 719e83c499b94822798705efe2a7bc8ed427822961236e9636414a4ac7425347
MD5 530e7a3687530f81d2a5271f1a5619ed
BLAKE2b-256 d7d1fd8b447b40a6c236823f194f9500b8468be5513e0502dd30b062caa37795

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