[New-bugs-announce] [issue35069] Unexecuted import in function causes UnboundLocalError

James Hewitt report at bugs.python.org
Thu Oct 25 15:28:51 EDT 2018


New submission from James Hewitt <jgh at caurinus.com>:

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.

----------
components: Library (Lib)
messages: 328470
nosy: jhewitt
priority: normal
severity: normal
status: open
title: Unexecuted import in function causes UnboundLocalError
type: behavior
versions: Python 3.6

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue35069>
_______________________________________


More information about the New-bugs-announce mailing list