#20443 closed New feature (fixed)
Import errors in settings cause confusing error messages
Reported by: | Sasha Romijn | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | dev |
Severity: | Normal | Keywords: | dceu13 |
Cc: | eromijn@… | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description
When the settings file itself has an import error, the error message suggests that the settings file could not be found. This can be very confusing, especially for new users.
Currently, the traceback is:
Traceback (most recent call last): File "./manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/Users/erik/dev/django/django/core/management/__init__.py", line 399, in execute_from_command_line utility.execute() File "/Users/erik/dev/django/django/core/management/__init__.py", line 392, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/Users/erik/dev/django/django/core/management/__init__.py", line 263, in fetch_command app_name = get_commands()[subcommand] File "/Users/erik/dev/django/django/core/management/__init__.py", line 109, in get_commands apps = settings.INSTALLED_APPS File "/Users/erik/dev/django/django/conf/__init__.py", line 54, in __getattr__ self._setup(name) File "/Users/erik/dev/django/django/conf/__init__.py", line 49, in _setup self._wrapped = Settings(settings_module) File "/Users/erik/dev/django/django/conf/__init__.py", line 130, in __init__ raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) ImportError: Could not import settings 'django5622.settings' (Is it on sys.path?): No module named foo
Whereas in reality the settings file was found, but contained an error.
Adding a bit of info on the original traceback makes this very obvious:
Traceback (most recent call last): File "./manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/Users/erik/dev/django/django/core/management/__init__.py", line 399, in execute_from_command_line utility.execute() File "/Users/erik/dev/django/django/core/management/__init__.py", line 392, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/Users/erik/dev/django/django/core/management/__init__.py", line 263, in fetch_command app_name = get_commands()[subcommand] File "/Users/erik/dev/django/django/core/management/__init__.py", line 109, in get_commands apps = settings.INSTALLED_APPS File "/Users/erik/dev/django/django/conf/__init__.py", line 55, in __getattr__ self._setup(name) File "/Users/erik/dev/django/django/conf/__init__.py", line 50, in _setup self._wrapped = Settings(settings_module) File "/Users/erik/dev/django/django/conf/__init__.py", line 135, in __init__ raise ImportError(msg) ImportError: Could not import settings 'django5622.settings' (Is it on sys.path?): No module named o in /Users/erik/dev/django5622/django5622/settings.py:12
Change History (7)
comment:1 by , 11 years ago
Has patch: | set |
---|
comment:2 by , 11 years ago
The error message now kinda assumes the settings module can be found. If not, it'll appear that an error occurred "somewhere in Django":
ImportError: Could not import settings 'djangoproject.settings' (Is it on sys.path?): No module named settings in /Users/simeon/django/django/utils/importlib.py:35
comment:3 by , 11 years ago
Triage Stage: | Unreviewed → Accepted |
---|
Maybe the error message could point out that one possible cause is import error in settings file itself?
comment:4 by , 11 years ago
Easy pickings: | set |
---|
@akaariai: yes, that's actually a more sensible and simpler solution. It also fixes svisser's concern. I built the original patch on the assumption that there were more types of errors that caused confusing messages, but it seems to be limited to import errors.
New trivial PR in https://github.com/django/django/pull/1217, tests run.
comment:6 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Pull request with patch in https://github.com/django/django/pull/1112