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.
Prerequisites
  • Familiarity with Pipenv. See here for my post on Pipenv.
  • Familiarity with Python Fire
  • (optional) Familiarity with PyInquirer
  • Getting started
    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.
    Demonstrating the error
    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
    Prettifying the error
    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.
    Summary
    Today's post demonstrated how to use the PrettyErrors to make our error debugging experience much more pleasant.
    Resources and further reading
    Photo credit: basilsamuellade
    Originally posted on my blog. To see new posts without delay, read the posts there and subscribe to my newsletter.

    23

    This website collects cookies to deliver better user experience

    Pretty Error Output In Python