Message328470
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. |
|
Date |
User |
Action |
Args |
2018-10-25 19:28:51 | jhewitt | set | recipients:
+ jhewitt |
2018-10-25 19:28:51 | jhewitt | set | messageid: <1540495731.24.0.788709270274.issue35069@psf.upfronthosting.co.za> |
2018-10-25 19:28:51 | jhewitt | link | issue35069 messages |
2018-10-25 19:28:51 | jhewitt | create | |
|