<span class="gmail_quote">On 5/23/07, <b class="gmail_sendername">Sundance</b> &lt;<a href="mailto:sundance@ierne.eu.org">sundance@ierne.eu.org</a>&gt; wrote:</span><blockquote class="gmail_quote" style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; margin-left: 0.80ex; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-left: 1ex">
Arve Knudsen wrote:<br><br>&gt; If an exception is raised in the last Python<br>&gt; layer, it is swallowed by the excepthook and a nice message box pops<br>&gt; up, BUT once control returns to the first Python layer<br><br>
Hi again,<br><br>In my opinion, the exception hook should never even return. That&#39;s what<br>I meant when I said your application should then close. When you&#39;re<br>dealing with an uncaught exception anyway, something has gone wrong and
<br>it is generally wise not to attempt to keep running, lest data<br>corruption and bad karma occur, in that approximate order.</blockquote><div><br>You might be right about that the exception hook should not return, at least now I do some cleaning up when I detect the application is about to exit.&nbsp;This&nbsp;approach&nbsp;has&nbsp;at&nbsp;least&nbsp;not&nbsp;proved&nbsp;to&nbsp;be&nbsp;a&nbsp;problem&nbsp;before. But, I don&#39;t know whether the exception will be handled before I return control to the Qt event loop. In the scenario I described in my previous mail, there is an inner and an outer Python block. &nbsp;The except hook will be invoked before control is returned to the first Python block (invoked by the Qt event loop), and so the first block will never get the chance to handle the exception.
<br></div><br><blockquote class="gmail_quote" style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; margin-left: 0.80ex; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-left: 1ex">
I am not sure that what you seem to be asking for is at all possible --<br>it would involve making the Qt event loop aware of Python exceptions, I<br>think, which doesn&#39;t at all sound like good Feng Shui to me.</blockquote>
<div><br>I&nbsp;was&nbsp;hoping&nbsp;maybe&nbsp;PyQt&nbsp;(with&nbsp;some&nbsp;sip&nbsp;magic?)&nbsp;would&nbsp;be&nbsp;able&nbsp;to&nbsp;trap exceptions only at the event loop level (in the interface between my code and the event loop).</div><br><blockquote class="gmail_quote" style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; margin-left: 0.80ex; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-left: 1ex">
If you really, really want to deal with Python exceptions at the<br>outermost possible level (which will still be inside the Qt event loop<br>level, mind), then I guess you should make an exception hook that will<br>store the exception stack in some global variable, push some manner of
<br>custom event to the application&#39;s main event queue (or put the<br>exception stack /in/ the custom event), then return, and have a custom<br>event handler pull the exception stack off that custom event and only<br>
THEN process it. And quit.</blockquote><div><br>It&#39;s possible, certainly, but very brittle since I have to check after control returns from a Qt method invoked from Python whether an exception has been detected in the meantime.
<br><br>Arve<br></div><br>