[Python-Dev] cProfile with generator throwing (original) (raw)

Eyal Lotem eyal.lotem at gmail.com
Sat Jun 9 05:49:57 CEST 2007


Hi. It seems that cProfile does not support throwing exceptions into generators properly, when an external timer routine is used.

The problem is that _lsprof.c: ptrace_enter_call assumes that there are no exceptions set when it is called, which is not true when the generator frame is being gen_send_ex'd to send an exception into it (Maybe you could say that only CallExternalTimer assumes this, but I am not sure). This assumption causes its eventual call to CallExternalTimer to discover that an error is set and assume that it was caused by its own work (which it wasn't).

I am not sure what the right way to fix this is, so I cannot send a patch. Here is a minimalist example to reproduce the bug:

import cProfile import time p=cProfile.Profile(time.clock) def f(): ... yield 1 ... p.run("f().throw(Exception())") Exception exceptions.Exception: Exception() in <cProfile.Profile object at 0xb7f5a304> ignored Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.5/cProfile.py", line 135, in run return self.runctx(cmd, dict, dict) File "/usr/lib/python2.5/cProfile.py", line 140, in runctx exec cmd in globals, locals File "", line 1, in File "", line 1, in f SystemError: error return without exception set



More information about the Python-Dev mailing list