跳转到主要内容

处理Python错误的助手

项目描述

errorhelpers

PyPI version PyPI pyversions Maintainability Test Coverage

处理Python错误的助手。

用法

# As a decorator
@errorhelpers.expect_error(*errors, on_unexpected_error=handler)
def some_error_prone_funcion():
    ...

# Using with statement
with errorhelpers.expect_error(*errors, on_unexpected_error=handler):
    # Some error prone operation
    ...

示例1: 基本用法

import pytest
import errorhelpers

with errorhelpers.expect_errors(ZeroDivisionError):
    assert 4 / 2 == 2

# `ZeroDivisionError` will be re-raised.
with pytest.raises(ZeroDivisionError):
    with errorhelpers.expect_errors(ZeroDivisionError):
        4 / 0

# In case of other exceptions, `errorhelpers.UnexpectedError("Unexpected error")`
# will be raised instead.
with pytest.raises(errorhelpers.UnexpectedError, match="Unexpected error"):
    with errorhelpers.expect_errors(ZeroDivisionError):
        "a" / "b"

示例2: 自定义错误

import pytest
import errorhelpers

class CustomError(Exception):
    @classmethod
    def raise_(cls, msg):
        def raiser(error):
            print("Hiding error:", error)
            raise cls(msg)

        return raiser

@errorhelpers.expect_errors(
    ZeroDivisionError, on_unexpected_error=CustomError.raise_("Custom error")
)
def sensitive_transaction(x, y):
    return int(x) / int(y)

assert sensitive_transaction(4, "2") == 2

# `ZeroDivisionError` will be re-raised.
with pytest.raises(ZeroDivisionError):
    sensitive_transaction(4, 0)

# In case of other exceptions, `CustomError` will be raised instead.
with pytest.raises(CustomError, match="Custom error"):
    sensitive_transaction("a", "b")

# Hiding error: invalid literal for int() with base 10: 'a'

由以下支持