Opened 12 years ago
Closed 12 years ago
#20428 closed Uncategorized (duplicate)
ImportError is swallowed while importing settings
Reported by: | giovannibajo | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | 1.4 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
In django.management.get_commands, there is the following code:
# Find the installed apps try: from django.conf import settings apps = settings.INSTALLED_APPS except (AttributeError, EnvironmentError, ImportError): apps = []
The problem with this code is that any ImportError raised by settings.py (eg: a missing third-party dependency) are swallowed, and this then leads to very hard-to-diagnose bugs because the settings module is half-loaded into memory, so a part of symbols might be missing.
The bug is that Django treats ImportError as an indication that settings.py does not exist, while in reality it is only a possibility; the other is that settings.py contains code that triggers ImportError.
My personal fix is to change the code as follows:
# Find the installed apps from django.conf import settings try: apps = settings.INSTALLED_APPS except AttributeError: apps = []
but I don't know whether it is the right thing. I assume the code was meant to somehow work even if the settings module is missing, while this way I'm basically forcing its existence. By changing the code, I know get this exception:
ImportError: Could not import settings 'myapp.settings' (Is it on sys.path?): No module named django_hstore
which reports the original exception, the missing dependency, and thus lets me fix it.
Thanks for the report, but that has been fixed some time ago (see #18545 and #18845).