#14130 closed (fixed)
Catching ImportError in manage.py considered dangerous
Reported by: | Setok | Owned by: | nobody |
---|---|---|---|
Component: | Core (Other) | Version: | 1.1 |
Severity: | Keywords: | manage settings import sprintnov13 | |
Cc: | Łukasz Rekucki, Béres Botond | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The basic implementation of manage.py does little else than check for an ImportError on settings. Unfortunately using try-except to check for module existence in Python is not a very good practise. The problem is that it hides any possible import errors that may occur within settings.py. Sure, the error displayed by manage.py does mention that possibility, but only in parenthesis, after bold text about settings.py missing.
Having just spend several hours trying to figure out what was going on I believe that, in balance, it would be better just to let the Python error fall through and for a proper stacktrace to occur. Alternatively try to figure out a way to detect if it was, in fact, the settings module which was missing, or something else. Annoyingly Python's ImportError does not seem to easily have that information available :(
Attachments (2)
Change History (11)
comment:1 Changed 13 years ago by
milestone: | → 1.3 |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:2 Changed 13 years ago by
Cc: | Łukasz Rekucki added |
---|
comment:3 Changed 13 years ago by
Cc: | Béres Botond added |
---|
Changed 13 years ago by
Attachment: | fix14130.patch added |
---|
Changed 13 years ago by
Attachment: | trac-14130.diff added |
---|
Updated the patch and removed an unused import.
comment:6 Changed 13 years ago by
Keywords: | sprintnov13 added |
---|
comment:7 Changed 13 years ago by
Triage Stage: | Accepted → Ready for checkin |
---|
This is an example where Django is using ImportError to establish existence of a module; in Django 1.2, we added tools to check for existence of a module without importing the module; we should be doing the same here.