Opened 19 years ago
Closed 18 years ago
#1647 closed defect (fixed)
django/core/template/__init__.py destroys useful information about exception
Reported by: | alankila | Owned by: | Adrian Holovaty |
---|---|---|---|
Component: | contrib.admin | Version: | |
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
The DebugNodeList hides useful information about the exception that occured.
class DebugNodeList(NodeList): def render_node(self, node, context): try: result = node.render(context) except TemplateSyntaxError, e: if not hasattr(e, 'source'): e.source = node.source raise except Exception: from sys import exc_info wrapped = TemplateSyntaxError('Caught an exception while rendering.') wrapped.source = node.source wrapped.exc_info = exc_info() raise wrapped return result
I propose changing it like this:
class DebugNodeList(NodeList): def render_node(self, node, context): try: result = node.render(context) except TemplateSyntaxError, e: if not hasattr(e, 'source'): e.source = node.source raise except Exception e: from sys import exc_info wrapped = TemplateSyntaxError('Caught an exception while rendering: %s' % e) wrapped.source = node.source wrapped.exc_info = exc_info() raise wrapped return result
I had a bug that caused the stock 500 handler to fail to work. The change makes the difference of debuggability between the errors:
TemplateSyntaxError: Caught an exception while rendering.
and
TemplateSyntaxError: Caught an exception while rendering: 'Attachment' object has no attribute 'message'.
After this change, I was able to make admin work again. It appears that my model's repr function had hit a problem or limitation with Django. (Separate ticket about the limitation follows.)
Change History (3)
comment:1 by , 19 years ago
comment:2 by , 18 years ago
Thanks a lot from me too! This simplifies debugging a LOT.
One minor correction. A comma is needed in the proposed change:
< except Exception e: > except Exception, e:
comment:3 by , 18 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Thanks for this fix! It helped me figure out a huge problem I didn't understand!