#19390 closed Bug (fixed)
NameError in models throws ambiguous message when running syncdb
| Reported by: | Dan Loewenherz | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.5-beta-1 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Design decision needed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
When I start a Django 1.5 repo and forget to import a required library, I get a very ambiguous error when running ./manage.py syncdb
My models.py
from django.contrib.auth.models import AbstractBaseUser
class Example(db.Model):
pass
$ ./manage.py syncdb NameError: name 'db' is not defined
The file path where this error occurs should probably be noted to users. I can imagine it getting tough to track down when in a large project with lots of apps.
Change History (4)
comment:1 by , 13 years ago
comment:2 by , 13 years ago
I think the traceback is a bit overkill, but just showing the NameError without *any* context isn't really enough to do anything about it. I would at least show the path of the file where it originated from.
Also, when running --traceback, it displays the exception twice:
Traceback (most recent call last):
File "EXAMPLE/lib/python2.7/site-packages/django/core/management/base.py", line 222, in run_from_argv
self.execute(*args, **options.__dict__)
File "EXAMPLE/lib/python2.7/site-packages/django/core/management/base.py", line 251, in execute
self.validate()
File "EXAMPLE/lib/python2.7/site-packages/django/core/management/base.py", line 277, in validate
num_errors = get_validation_errors(s, app)
File "EXAMPLE/lib/python2.7/site-packages/django/core/management/validation.py", line 35, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "EXAMPLE/lib/python2.7/site-packages/django/db/models/loading.py", line 165, in get_app_errors
self._populate()
File "EXAMPLE/lib/python2.7/site-packages/django/db/models/loading.py", line 71, in _populate
self.load_app(app_name, True)
File "EXAMPLE/lib/python2.7/site-packages/django/db/models/loading.py", line 95, in load_app
models = import_module('.models', app_name)
File "EXAMPLE/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "EXAMPLE/app/models.py", line 4, in <module>
class Example(db.Model):
NameError: name 'db' is not defined
NameError: name 'db' is not defined
comment:3 by , 13 years ago
| Triage Stage: | Unreviewed → Design decision needed |
|---|
comment:4 by , 13 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Imo this was fixed with [6a91b638423d].
This is a common Python error message, I wouldn't call it ambiguous. You can obtain the full traceback with the --traceback option.
Maybe Django should display tracebacks by default...