23
Pretty Error Output In Python
I write content for AWS, Kubernetes, Python, JavaScript and more. To view all the latest content, be sure to visit my blog and subscribe to my newsletter. Follow me on Twitter.
This is Day 11 of the #100DaysOfPython challenge.
This post will use the
PrettyErrors
library to output more readable errors in Python.It will build off the work done on learning Python Fire and
PyInquirer
basics in a previous blog post.PyInquirer
While I will be using my
hello-python-fire
repo, the follow will work in any repo initialized with pipenv
.# Add PrettyErrors
$ pipenv install pretty_errors
We are now able to begin throwing some example errors.
Python Fire requires valid input for method arguments for how it operates.
We will simply update the top of the code for
cli.py
to raise a very contrived exception:#!/usr/bin/env python
import fire
from PyInquirer import prompt
class IngestionStage(object):
def run(self):
raise Exception("Contrived example")
return 'Ingesting! Nom nom nom...'
Now if we run
python cli.py ingestion run
we will see the following error:$ python cli.py ingestion run
Traceback (most recent call last):
File "/Users/dennisokeeffe/code/blog-projects/hello-fire/cli.py", line 66, in <module>
fire.Fire(Pipeline)
File "/Users/dennisokeeffe/code/blog-projects/hello-fire/.venv/lib/python3.9/site-packages/fire/core.py", line 141, in Fire
component_trace = _Fire(component, args, parsed_flag_args, context, name)
File "/Users/dennisokeeffe/code/blog-projects/hello-fire/.venv/lib/python3.9/site-packages/fire/core.py", line 466, in _Fire
component, remaining_args = _CallAndUpdateTrace(
File "/Users/dennisokeeffe/code/blog-projects/hello-fire/.venv/lib/python3.9/site-packages/fire/core.py", line 681, in _CallAndUpdateTrace
component = fn(*varargs, **kwargs)
File "/Users/dennisokeeffe/code/blog-projects/hello-fire/cli.py", line 8, in run
raise Exception("Contrived example")
Exception: Contrived example
To see Pretty Errors in action, all we need to do is import the package:
#!/usr/bin/env python
import fire
from PyInquirer import prompt
import pretty_errors
class IngestionStage(object):
def run(self):
raise Exception("Contrived example")
return 'Ingesting! Nom nom nom...'
Now if we run
python cli.py ingestion run
we will see the following error:$ python cli.py ingestion run
--------------------------------------------------------------------------------------------------------------
cli.py 67 <module>
fire.Fire(Pipeline)
core.py 141 Fire
component_trace = _Fire(component, args, parsed_flag_args, context, name)
core.py 466 _Fire
component, remaining_args = _CallAndUpdateTrace(
core.py 681 _CallAndUpdateTrace
component = fn(*varargs, **kwargs)
cli.py 9 run
raise Exception("Contrived example")
Exception:
Contrived example
A much nicer and easier-to-debug output error.
Today's post demonstrated how to use the
PrettyErrors
to make our error debugging experience much more pleasant.Photo credit:
basilsamuellade
Originally posted on my blog. To see new posts without delay, read the posts there and subscribe to my newsletter.
23