Defer is an awesome control flow construct. Python implementations have historically relied on cumbersome decorators or other manual coordination. No more!
Use python-defer to schedule code to be run at the end of a function, whether or not anything fails. Think of it like an automagic finally block that you can use inline anywhere.
Check out the blog post to learn how this was built.
$ pip install python-deferThe default way to use python-defer is true magic. Simply write your code and append an in defer to it.
from defer import defer
def foo():
print(", world!") in defer
print("Hello", end="")
# do something that might fail...
assert 1 + 1 == 3$ python foo.py
Hello, World!
Traceback (most recent call last):
File "foo.py", line 7, in <module>
assert 1 + 1 == 3
AssertionErrorIf you prefer a more explicit approach, you can use the d function, which takes a lambda.
from defer.sugarfree import defer as d
def foo():
d(print, "1")
print("2")
d(lambda: print("3"))
raise RuntimeError("oh no!")
print("4")$ python foo.py
2
3
1
Traceback (most recent call last):
File "foo.py", line 7, in <module>
RuntimeError: oh no!