On 2022-08-04 at 09:41:00 +0200,
Albert-Jan Roskam <sjeik_ap...@hotmail.com> wrote:

>    Thank you both. I'll give this a try. I think it would be nice if
>    the standard library function atexit.register would be improved,
>    such that the registered functions would not only be called upon
>    (a) normal program termination, but that one could also register
>    functions that are called (b) upon error (c) unconditionally. Much
>    like (a) try - (b) except - (c) finally.

There.  You've just designed the top level of a better behaved, more
robust application (completely untested):

    on_normal_exit_funcs = list()
    on_error_exit_funcs = list()
    on_any_exit_funcs = list()

    def run_exit_funcs(exit_funcs):
        for func in exit_funcs:
            try: func()
            except e: maybe_do_some_logging(e)

    try:
        run_the_application()
        run_exit_funcs(on_normal_exit_funcs)
    except:
        run_exit_funcs(on_error_exit_funcs)
    finally:
        run_exit_funcs(on_any_exit_funcs)

    def register_normal_exit_func(f):
        on_normal_exit_funcs.append(f)

    def register_error_exit_func(f):
        on_error_exit_funcs.append(f)

    def register_any_exit_func(f):
        on_any_exit_funcs.append(f)

No, really.  There are worse ways to build an extremely generic, fairly
minimalist application framework.

Season to taste,¹ add it to your personal (or company) toolbox, and
refine and improve it as things come up.  You may discover some number
of common exit functions that are useful across appliations, too.

¹ are you object oriented, functional, imperative, or something else?
do you like long names, short names, names that follow some existing
coding standard, non-English names? do you have a standardized
logging/exception library?
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to