This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author jhewitt
Recipients jhewitt
Date 2018-10-25.19:28:51
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1540495731.24.0.788709270274.issue35069@psf.upfronthosting.co.za>
In-reply-to
Content
Having 'import logging.config' in an if statement in a function causes a namespace issue, despite the fact that the import is not reached.

Example code:

---
#!/usr/bin/env python3

# Test weird import bug

import logging


config = {}
config['log'] = {}
config['log']['log_type'] = 'file'
config['log']['log_file'] = './log'
config['log']['config'] = { 'version' : 1 }


def do_config_logging():
    if config['log']['log_type'] == 'from_config':
        import logging.config
        logging.config.dictConfig(config['log']['config'])
    elif config['log']['log_type'] == 'file':
        logging.basicConfig(filename=config['log']['log_file'])
        logging.info("start logging")


if __name__ == "__main__":
    do_config_logging()

---


This results in:

Traceback (most recent call last):
  File "./bug.py", line 25, in <module>
    do_config_logging()
  File "./bug.py", line 20, in do_config_logging
    logging.basicConfig(filename=config['log']['log_file'])
UnboundLocalError: local variable 'logging' referenced before assignment


Notes:

This was run on Ubuntu Linux 18.04 Intel 64-bit, Python version 3.6.6

The problem does not occur if the branch is actually taken, and it does not occur if the 'if' statement is not in a function.  It also does not occur if 'logging.config' is imported as some other name, eg. 'configlogging'.

virtualenv is installed (via the distribution package) but not in use in the test case.
History
Date User Action Args
2018-10-25 19:28:51jhewittsetrecipients: + jhewitt
2018-10-25 19:28:51jhewittsetmessageid: <1540495731.24.0.788709270274.issue35069@psf.upfronthosting.co.za>
2018-10-25 19:28:51jhewittlinkissue35069 messages
2018-10-25 19:28:51jhewittcreate