Skip to main content

expect-exception

A decorator and context manager to run code that you expect (and want!) to raise an exception.

This module is meant to "reverse" the usage of try/except, for when you write code where the exception is the "good" branch. It raises an ExceptionNotRaisedError when the expected exception type is not raised in the wrapped code, either because it finished executing or because another, unexpected exception was raised.

For example, you can use expect_exception to replace the following code:

def upload_new_file(filename, content)
  try:
    some_api.fetch_file(filename)
  except FileNotFoundError:
    # We don't want to override existing files on SomeService, but SomeApi
    # doesn't have a method to check if a file exists!
    pass

  some_api.upload_file(filename, content)

With this:

def upload_new_file(filename, content)
  with expect_exception(FileNotFoundError):
    # We don't want to override existing files on SomeService, but SomeApi
    # doesn't have a method to check if a file exists!
    some_api.fetch_file(filename)
  some_api.upload_file(filename, content)

Alternatively, you can use expect_exception as a decorator for a helper method:

# some_api.py

class SomeApi(...):
  ...

  def fetch_file(self, filename):
    ...

  @expect_exception(FileNotFoundError):
  def ensure_file_missing(self, filename):
    self.fetch_file(filename)

# ---

def upload_new_file(filename, content):
  some_api.ensure_file_missing(filename)
  some_api.upload_file(filename, content)

Usage

from expect_exception import expect_exception

# Use either as a @decorator or as a `with` statement context.
expect_exception(
  SomeExceptionType[, SomeExceptionType, ...,
  wrap_unexpected_exception: bool])

Arguments:

  • *exception_types: Type[BaseException] (positional arguments): one or more exception types (class objects) that are expected to be raised in this context. Exceptions that inherit from any of those listed here will also be caught.
  • wrap_unexpected_exception: bool (keyword only argument): True to wrap any unexpected exception in an ExceptionNotRaisedError; False to bubble up the unexpected exception. Defaults to True.

Metadata

Release files for expect-exception 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for expect-exception 1.0.2
File Size Uploaded
expect-exception-1.0.2.tar.gz 4.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for expect-exception 1.0.2
File Interpreter ABI Platform
expect_exception-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 10.4 kB

Release files / expect-exception-1.0.2.tar.gz

Download URL expect-exception-1.0.2.tar.gz
Size 4.2 kB
Tags Source
SHA-256 checksum
How to use checksums
123ff0c60328c62dbe8716823dbdd787f94a35433d0524496352a8aedca4d4f7
BLAKE2b-256 checksum
How to use checksums
ff119e7bc6766e4b849c9d46e6df54b746dc8ada627adf54dbda51f12bad8050
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

Release files / expect_exception-1.0.2-py3-none-any.whl

Download URL expect_exception-1.0.2-py3-none-any.whl
Size 6.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
83c45cbc5873d1068dfff8ac3b256db9fe9dd955fa5740b97c47548478cc61cf
BLAKE2b-256 checksum
How to use checksums
9c7775474417cff221d04108ed2f88b4086ce5032047c3b24036b95f5ca52fe2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page