Stefan Behnel, 26.02.2012 20:54: > Amaury Forgeot d'Arc, 18.02.2012 15:41: >> 2012/2/18 Stefan Behnel >>> Here's an example. >>> >>> Python code: >>> >>> def print_excinfo(): >>> print(sys.exc_info()) >>> >>> Cython code: >>> >>> from stuff import print_excinfo >>> >>> try: >>> raise TypeError >>> except TypeError: >>> print_excinfo() >>> >>> With the code removed, Cython will not store the TypeError in >>> sys.exc_info(), so the Python code cannot see it. This may seem like an >>> unimportant use case (who uses sys.exc_info() anyway, right?), but this >>> becomes very visible when the code that uses sys.exc_info() is not user >>> code but CPython itself, e.g. when raising another exception or when >>> inspecting frames. Things grow really bad here, especially in Python 3. >> >> I think I understand now, thanks for your example. >> Things are a bit simpler in PyPy because these exceptions are >> stored in the frame that is currently handling it. At least better than >> CPython >> which stores it in one place, and has to somehow save the state of the >> previous frames. >> Did you consider adding such a function to CPython? >> "PyErr_SetCurrentFrameExceptionInfo"? >> >> For the record, pypy could implement it as: >> space.getexecutioncontext().gettopframe_nohidden().last_exception = >> operationerr >> i.e. the thing returned by sys.exc_info(). > > I've dropped a patch for CPython in the corresponding tracker ticket: > > http://bugs.python.org/issue14098 > > The (trivial) implementation of the two functions is at the end of this file: > > http://bugs.python.org/file24613/exc_info_capi.patch > > Could you add them to PyPy?
Anyone? Stefan _______________________________________________ pypy-dev mailing list pypy-dev@python.org http://mail.python.org/mailman/listinfo/pypy-dev