• from my lab 3

    From Stefan Ram@21:1/5 to All on Fri Feb 10 14:31:11 2023
    main.py

    import logging

    logging.getLogger().setLevel( logging.DEBUG )

    class log_class:
    def __init__( self ):
    self.depth = 0
    def wrap( self, func ):
    def wrap( *args, **kwargs ):
    self.info( 'starting ' + func.__name__ )
    self.depth += 1
    result = func( *args, **kwargs )
    self.info( 'ending ' + func.__name__ )
    self.depth -= 1
    return result
    return wrap
    def info( self, text ):
    logging.info( ' ' * self.depth + text )

    log = log_class()

    @log.wrap
    def factorial( n ):
    log.info( f'{n = }' )
    return n * factorial( n - 1 ) if n else 1

    factorial( 2 )

    output

    INFO:root:starting factorial
    INFO:root: n = 2
    INFO:root: starting factorial
    INFO:root: n = 1
    INFO:root: starting factorial
    INFO:root: n = 0
    INFO:root: ending factorial
    INFO:root: ending factorial
    INFO:root: ending factorial

    previous "from my lab" posts

    Adding "start" and "end" methods to a logger
    1 How a function can get its own name
    2 Logging function entry and exit

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)