Django

Code

Ticket #11368 (closed: duplicate)

Opened 8 months ago

Last modified 7 months ago

debug error reporter should include traceback for nested exceptions

Reported by: jfire Assigned to: nobody
Milestone: Component: Core framework
Version: 1.0 Keywords:
Cc: glenn@zewt.org Triage Stage: Unreviewed
Has patch: 0 Needs documentation: 0
Needs tests: 0 Patch needs improvement: 0

Description

There are a number of place in the django codebase that trap Exception and then raise a new exception. This results in less-than-ideal debugging information being presented in the default error page; in particular, the traceback from the original exception is unavailable.

Most recently, I encountered this in the template renderer:

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(u'Caught an exception while rendering: %s' % force_unicode(e, errors='replace'))
            wrapped.source = node.source
            wrapped.exc_info = exc_info()
            raise wrapped
        return result

When this wrapped TemplateSyntaxError? is displayed in the default error page, the traceback ends at the 'raise wrapped' line; the only part of the original exception that is available is the message ("'RelatedManager?' object is not iterable" in my current case). This makes the source of the problem more difficult to determine. The traceback in wrapped.exc_info should be displayed in addition to, or instead of, the traceback currently displayed.

This was briefly discussed (exactly 1 year ago) on django-developers. A partial patch was posted.

Attachments

Change History

07/11/09 16:41:56 changed by Glenn

  • cc set to glenn@zewt.org.
  • needs_better_patch changed.
  • needs_tests changed.
  • needs_docs changed.

This isn't the right fix. This would have to be implemented in every custom exception reporter, including third-party ones that don't know about Django exceptions at all.

The actual problem is that DebugNodeList? is raising the new exception incorrectly. It needs to include the original traceback.

try:
    ...
catch Exception, e:
    raise NewException, None, sys.exc_info()[2]

See #11461.

07/28/09 22:31:55 changed by SmileyChris

  • status changed from new to closed.
  • resolution set to wontfix.

I agree.

07/28/09 23:16:34 changed by SmileyChris

  • status changed from closed to reopened.
  • resolution deleted.

07/28/09 23:16:55 changed by SmileyChris

  • status changed from reopened to closed.
  • resolution set to duplicate.

(actually, this is more of a duplicate than a wontfix)


Add/Change #11368 (debug error reporter should include traceback for nested exceptions)




Change Properties
Action