[Tutor] "alias" instance of logger

Kent Johnson kent37 at tds.net
Sat Oct 6 06:24:36 CEST 2007


Robert Jackson wrote:

> log = logging.basicConfig(level=logging.DEBUG,filename="/home/richard/templog",filemode='w')

logging.basicConfig() does not return a logger, it returns None.

> Later in my program I do:
> 
> log.info("finished step 4.")
> 
> Python spits out this error:
> Traceback (most recent call last):
> 
>   File "<stdin>", line 1, in <module>
> 
> AttributeError: 'NoneType' object has no attribute 'info'

Because log is None and None does not have an 'info' attribute.
> 
> I CAN, however, do:
> logging.info("finished step 4.")

Sure, logging is the logging module and it has an info function. This is 
normal usage.

> What confuses me about this is that I can do something like this:
> 
> # call another function and pass it the logger instance:
> 
> foo(logging)

You are not passing a logger, you are passing the logging module itself.

> And, if I define foo() like this:
> 
> def foo(log):
> 
>    # this works fine!
> 
>    log.info("finished step 4.")
> 
> The log.info works fine inside of foo().

Sure, because inside of foo, the name 'log' is bound to the actual 
parameter passed in which is the logging module.

> Why is it that I can pass logging as an instance into a function, and
> use whatever instance name I wants inside of foo(),

That is true of every function parameter, you can give them whatever 
name you want.

> but I can't assign
> an "alias" for the logging instance inside of main() (by doing instancealias = logging.basic())?

Because you are not aliasing logging here. Just assign
log = logging

though I don't see the point, just use logging.info() etc.

Kent


More information about the Tutor mailing list