<div dir="ltr"><font face="arial, helvetica, sans-serif">Hi Folks,</font><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">According to the documentation online:</font></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><p style="text-align:justify;line-height:15.6px;color:rgb(0,0,0);font-size:12px"><font face="arial, helvetica, sans-serif">SIP generates a Python object for each exception defined with the <a class="gmail-reference gmail-internal" href="http://pyqt.sourceforge.net/Docs/sip4/directives.html#directive-%Exception" style="color:rgb(65,134,203);text-decoration-line:none"><code class="gmail-xref gmail-std gmail-std-directive gmail-docutils gmail-literal" style="background-color:transparent;font-weight:bold"><span class="gmail-pre" style="hyphens: none;">%Exception</span></code></a> directive.</font></p></div><div><p style="text-align:justify;line-height:15.6px;color:rgb(0,0,0);font-size:12px"><font face="arial, helvetica, sans-serif">These objects are named with the fully qualified exception name (i.e. including any enclosing scope) prefixed by <code class="gmail-docutils gmail-literal"><span class="gmail-pre" style="hyphens: none;">sipException_</span></code>. For example, the type object for enum <code class="gmail-docutils gmail-literal"><span class="gmail-pre" style="hyphens: none;">Except</span></code> defined in class <code class="gmail-docutils gmail-literal"><span class="gmail-pre" style="hyphens: none;">Klass</span></code> is<code class="gmail-docutils gmail-literal"><span class="gmail-pre" style="hyphens: none;">sipException_Klass_Except</span></code>.</font></p></div><div><p style="text-align:justify;line-height:15.6px;color:rgb(0,0,0);font-size:12px"><font face="arial, helvetica, sans-serif">The objects of all imported exceptions are available to handwritten code.</font></p></div></blockquote><div><p style="text-align:justify;line-height:15.6px;color:rgb(0,0,0);font-size:12px"><font face="arial, helvetica, sans-serif">This worked for us well in 4.17. I am trying to upgrade to 4.19 and came across a problem. In 4.19, for a SIP module called say, 'foo,' there <i>is</i> an #define in sipAPIfoo.h of the form</font></p><p style="text-align:justify;line-height:15.6px"><font color="#000000" face="monospace, monospace"><span style="font-size:12px">#define sipException_my_exception sipExportedExceptions_foo[0]</span></font></p><div style="text-align:justify"><font face="arial, helvetica, sans-serif">However, the array <span style="color:rgb(0,0,0);font-size:12px">sipExportedExceptions_foo is defined in 'sipfoocmodule.cpp' but not declared in any header file.</span></font></div></div><div style="text-align:justify"><span style="color:rgb(0,0,0);font-size:12px"><font face="arial, helvetica, sans-serif"><br></font></span></div><div style="text-align:justify"><span style="color:rgb(0,0,0);font-size:12px"><font face="arial, helvetica, sans-serif">I managed to work around this in one module by simply declaring it before my handwritten C code:</font></span></div><div style="text-align:justify"><span style="color:rgb(0,0,0);font-size:12px"><font face="arial, helvetica, sans-serif"><br></font></span></div><div style="text-align:justify"><font color="#000000" face="monospace, monospace"><span style="font-size:12px">extern PyObject *sipExportedExceptions_foo[3];</span></font><br></div><div style="text-align:justify"><font color="#000000" face="arial, helvetica, sans-serif"><span style="font-size:12px"><br></span></font></div><div style="text-align:justify"><font color="#000000" face="arial, helvetica, sans-serif"><span style="font-size:12px">But unfortunately got completely stuck when I came a cross a SIP file that was shared between a couple of different modules as the name of the module it was going to be used in could not be known. The code looks a bit like this (I believe it was also taken from the PyQt example documentation somewhere):</span></font></div><div style="text-align:justify"><font color="#000000" face="arial, helvetica, sans-serif"><span style="font-size:12px"><br></span></font></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px"><div><font face="monospace, monospace">%Exception std::exception(SIP_Exception) /PyName=StdException/</font></div><div><font face="monospace, monospace">{</font></div><div><font face="monospace, monospace">%TypeHeaderCode</font></div><div><font face="monospace, monospace">#include <exception></font></div><div><font face="monospace, monospace">%End</font></div><div><font face="monospace, monospace">%RaiseCode</font></div><div><font face="monospace, monospace"><span style="white-space:pre">    </span>const char* what = sipExceptionRef.what();</font></div><div><font face="monospace, monospace"><span style="white-space:pre">    </span>SIP_BLOCK_THREADS</font></div><div><font face="monospace, monospace">    PyErr_SetString(sipException_std_exception, what);</font></div><div><font face="monospace, monospace"><span style="white-space:pre">    </span>SIP_UNBLOCK_THREADS</font></div><div><font face="monospace, monospace">%End</font></div><div><font face="monospace, monospace">};</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div>I wonder if this is related to the incompatibility notes from the 4.19 release:</div><div><br></div></span></font></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style="text-align:justify"><font color="#000000"><span style="font-size:12px"><div><span style="font-family:"times new roman"">Starting with this version only those type structures needed by the generated code are automatically available to handwritten code possibly resulting in compiler errors. Handwritten code should be changed to call </span><a class="gmail-reference gmail-internal" href="http://pyqt.sourceforge.net/Docs/sip4/c_api.html#c.sipFindType" title="sipFindType" style="color:rgb(65,134,203);text-decoration-line:none;font-family:"times new roman""><code class="gmail-xref gmail-c gmail-c-func gmail-docutils gmail-literal" style="background-color:transparent;font-weight:bold"><span class="gmail-pre" style="hyphens: none;">sipFindType()</span></code></a><span style="font-family:"times new roman""> to obtain a pointer to the required type structure.</span></div><div><span style="font-family:"times new roman""><br></span></div></span></font></div></blockquote><span style="font-size:12px;color:rgb(0,0,0);text-align:justify">I did try using sipFindType to find my exception type but with no success, and looking at the generated code I can't see anywhere that the exceptions are registered in any way except in the python module dictionary.</span><br><div><span style="font-size:12px;color:rgb(0,0,0);text-align:justify"><br></span></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px">Apologies if this question has been asked already - I did do a quick ctrl+f of the post titles to the mailing list; I couldn't find a better way to search. I've been googling for a solid day, I can't believe this hasn't affected anyone else - perhaps our usage is non-standard in some way?</span></font></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px"><br></span></font></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px">Anyhow, any pointers would be greatly appreciated.</span></font></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px"><br></span></font></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px">All the best,</span></font></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px"><br></span></font></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px">Philip</span></font></div><div style="text-align:justify"><font color="#000000"><span style="font-size:12px"><br></span></font></div></div>