[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 Python-bugs-list
mailing list