Skip to main content

Make sudden erros not stop your program

Project description

safefunc

Important

You may want to use the newer library fnsafe.

Make sudden erros not stop your program

Installation

pip install safefunc

from safefunc import makesafe

Basic Example

@makesafe()
def divide(a, b):
    return a / b

print("Let's calculate!")
result = divide(1, 0)
print(f"{result = }")

Output:

Let's calculate!
Ignoring exception in divide
Traceback (most recent call last):
  File "<string>", line 40, in safe
  File "<string>", line 75, in divide
ZeroDivisionError: division by zero
result = None

As you can see, the exception gets printed but the program continues.

More Examples

Let's try the same thing with divide(1, 1):

Output:

Let's calculate!
result = 1

Now everything worked fine.

Some functions may return None. If an error happens, it would also return None. Luckily we can differate between success and failure with the return_entire_result paramter:

@makesafe(return_entire_result = True)
def divide(a, b):
    return a / b

print("Let's calculate!")
result = divide(1, 0)
if result: # or result.success
    print(result()) # or result.result

In this case our function returns a Result object which allows us to check wether the function succeeded or not. The result attribute (which also can be accessed by calling the object) returns depending on the success, the function return value or the exception.

Let's expect, we call divide("1", 1). Because the first argument is not supported for division, it would raise an error. If we only want to ignore ZeroDivisionErrors, we can make use of the ignore parameter. You can interpret this as a whitelist:

@makesafe(return_entire_result = True, ignore = [ZeroDivisionError])
def divide(a, b):
    return a / b

print("Let's calculate!")
result = divide("1", 1)
if result:
    print(result())

This will raise any error that occures except ZeroDivisionError.

We can also reverse the situation and ignore any exception except ZeroDivisionError by setting the raise_when parameter. You can understand this as a blacklist:

@makesafe(return_entire_result = True, raise_when = [ZeroDivisionError])
def divide(a, b):
    return a / b

print("Let's calculate!")
result = divide("1", 1)
if result:
    print(result())

Keep in mind that you can not set both ignore and raise_when. If you do so, a TypeError gets raised.

Other Parameters

quiet

refrains displaying the exception

type: bool

default: False

title

text that gets displayed above the exception

type: str

default: "Ignoring exception in {function.__name__}"

colored

displays the exception in a darker color; may not work on every device / console; should not be used when using a file for the output

type: bool

default: False

file

a file or file-like object where the ouput gets written to

type: typing.TextIO

default: sys.stderr

inspired by discord.py

Tips

In case you want to just run a function safely instead of directly making it safe, you can include this function:

from safefunc import makesafe

def runsafe(function, *args, **kwargs):
    return makesafe(*args, **kwargs)(function)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

safefunc-0.0.5.post1.tar.gz (3.6 kB view details)

Uploaded Source

Built Distribution

safefunc-0.0.5.post1-py3-none-any.whl (3.8 kB view details)

Uploaded Python 3

File details

Details for the file safefunc-0.0.5.post1.tar.gz.

File metadata

  • Download URL: safefunc-0.0.5.post1.tar.gz
  • Upload date:
  • Size: 3.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for safefunc-0.0.5.post1.tar.gz
Algorithm Hash digest
SHA256 27af847c806c45fd52fb467148487f2e0c7355ba874de637f9f3fc49f651e7d3
MD5 eddc38e7183a586ba489d2c257502ac7
BLAKE2b-256 34f5e4d3a3e93fc2c924231aa7bd9fc418033e479ff1bb1a898be7fd82d3cdc8

See more details on using hashes here.

File details

Details for the file safefunc-0.0.5.post1-py3-none-any.whl.

File metadata

File hashes

Hashes for safefunc-0.0.5.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 bb34bbf64f89e2be6309d797d59ff3572aa25d3c4811ce84b5edb75dc9fdb0d3
MD5 4436fa52d6ad2d08429ed119ce3392be
BLAKE2b-256 ca72836b8db1a3c55fabdbe5e8fbb172e8aca56cb963f0e3aa8c5646ac2e9f60

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page