Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/grimen/python-mybad
My friendly error base class - for Python.
https://github.com/grimen/python-mybad
baseclass color colors debug detailed error errors inspector meta pretty python python2 python3 stacktrace
Last synced: about 2 months ago
JSON representation
My friendly error base class - for Python.
- Host: GitHub
- URL: https://github.com/grimen/python-mybad
- Owner: grimen
- License: mit
- Created: 2019-01-27T03:41:02.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-26T10:15:11.000Z (over 2 years ago)
- Last Synced: 2024-11-01T20:28:53.466Z (2 months ago)
- Topics: baseclass, color, colors, debug, detailed, error, errors, inspector, meta, pretty, python, python2, python3, stacktrace
- Language: Python
- Homepage: https://pypi.org/project/mybad
- Size: 46.9 KB
- Stars: 3
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: MIT-LICENSE
Awesome Lists containing this project
README
# `mybad` [![PyPI version](https://badge.fury.io/py/mybad.svg)](https://badge.fury.io/py/mybad) [![Build Status](https://travis-ci.com/grimen/python-mybad.svg?branch=master)](https://travis-ci.com/grimen/python-mybad) [![Coverage Status](https://codecov.io/gh/grimen/python-mybad/branch/master/graph/badge.svg)](https://codecov.io/gh/grimen/python-mybad)
*My friendly error base class - for Python.*
## Introduction
One in general always needs a application/library specific error base class, but the native errors are very limited in what meta/debugging information they can hold at time they are raised. For better debugging and error reporting/inspection this error base class allows to attach some additonal error context information that can be used to better understand the issue - without having to create custom error formatters, or run debugger.
## Install
Install using **pip**:
```sh
$ pip install mybad
```## Use
Very basic **[example](https://github.com/grimen/python-mybad/tree/master/examples/basic.py)**:
```python
from mybad import Errorclass ToMuchError(Error):
passdef print_money(stash):
try:
if isinstance(stash, str) and len(stash) > 13:
raise Exception('Too much money to print: {0}'.format(stash))print('PRINT {0}'.format(stash))
except Exception as error:
raise ToMuchError(error,
message = 'Out of money printing ink...',
id = hash(stash),
key = 'too_much',
code = 400,
details = dict(
stash = stash,
)
)amount = ''
for dollar in range(42):
amount += '$'print_money(amount)
```
Run this with optional environment variables `COLORS` / `ERROR_COLORS` and/or `VERBOSE` / `ERROR_VERBOSE` set too truthy or falsy values, so see various error info formatting in terminal.
Something like this (imagine some colorized formatting):
```bash
PRINT $
PRINT $$
PRINT $$$
PRINT $$$$
PRINT $$$$$
PRINT $$$$$$
PRINT $$$$$$$
PRINT $$$$$$$$
PRINT $$$$$$$$$
PRINT $$$$$$$$$$
PRINT $$$$$$$$$$$
PRINT $$$$$$$$$$$$
PRINT $$$$$$$$$$$$$
===============================
str(error)
---------------------------
Out of money printing ink... - {'stash': '$$$$$$$$$$$$$$'}===============================
error.stack
---------------------------
Traceback (most recent call last):
File "examples/basic.py", line 27, in print_money
raise Exception('Too much money to print: {0}'.format(stash))
Exception: Too much money to print: $$$$$$$$$$$$$$===============================
error.inspect()
---------------------------
{ 'code': 400,
'details': {'stash': '$$$$$$$$$$$$$$'},
'id': 3563898309523127190,
'key': 'too_much',
'message': 'Out of money printing ink...',
'stack': [ { 'code': ['stash = stash,'],
'file': 'examples/basic.py',
'function': 'print_money',
'line': 38},
{ 'code': ['print_money(amount)'],
'file': 'examples/basic.py',
'function': '',
'line': 48}],
'type': 'ToMuchError'}===============================
error.json()
---------------------------
{
"type": "ToMuchError",
"id": 3563898309523127190,
"code": 400,
"key": "too_much",
"message": "Out of money printing ink...",
"details": {
"stash": "$$$$$$$$$$$$$$"
},
"stack": [
{
"file": "examples/basic.py",
"function": "print_money",
"line": 38,
"code": [
"stash = stash,"
]
},
{
"file": "examples/basic.py",
"function": "",
"line": 48,
"code": [
"print_money(amount)"
]
}
]
}```
## Test
Clone down source code:
```sh
$ make install
```Run **colorful tests**, with only native environment (dependency sandboxing up to you):
```sh
$ make test
```Run **less colorful tests**, with **multi-environment** (using **tox**):
```sh
$ make test-tox
```## Related
- [**`node-mybad`**](https://github.com/grimen/python-mybase) - *"My friendly error base class - for Node/JavaScript"*
- [**`python-mybase`**](https://github.com/grimen/python-mybase) - *"My friendly library base class - for Python"*## About
This project was mainly initiated - in lack of solid existing alternatives - to be used at our work at **[Markable.ai](https://markable.ai)** to have common code conventions between various programming environments where **Python** (research, CV, AI) is heavily used.
## License
Released under the MIT license.