<div dir="ltr"><span style="font-size:12.8px">I'm aware of "</span><font face="courier new, monospace" style="font-size:12.8px">raise ... from None</font><span style="font-size:12.8px">" (from PEP 415). However, how can I achieve that same effect (of suppressing the "During handling of the above exception, another exception occurred" message) without having control over the code that is executed from the except clause? I thought that sys.exc_clear() could be used for this, but that function doesn't exist in Python 3 anymore.</span><br style="font-size:12.8px"><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Why would I want this? I have some simple caching code that looks like (simplified):<br></div><div style="font-size:12.8px"><br></div><blockquote style="font-size:12.8px;margin:0px 0px 0px 40px;border:none;padding:0px"><div><font face="courier new, monospace">try:</font></div><div><font face="courier new, monospace">    value = cache_dict[key]</font></div><div><font face="courier new, monospace">except KeyError:</font></div><div><font face="courier new, monospace">    value = some_api.get_the_value_via_<wbr>web_service_call(key)</font></div><div><font face="courier new, monospace">    cache_dict[key] = value</font></div></blockquote><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">When there's an exception in the API call, the output will be something like this:<br></div><div style="font-size:12.8px"><br></div><blockquote style="font-size:12.8px;margin:0px 0px 0px 40px;border:none;padding:0px"><div><font face="courier new, monospace">Traceback (most recent call last):</font></div><div><font face="courier new, monospace">  File ..., line ..., in ...</font></div><div><font face="courier new, monospace">KeyError: '...'</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">During handling of the above exception, another exception occurred:</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Traceback (most recent call last):</font></div><div><font face="courier new, monospace">  File ..., line ..., in ...</font></div><div><font face="courier new, monospace">some_api.<wbr>TheInterestingException: ...</font></div></blockquote><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><div>But I find this misleading, as the original KeyError is not really an error at all. I could of course avoid the situation by changing the try/except (EAFP) into a test for the key's presence (LBYL) but that's not very Pythonic and less thread-friendly <font size="1">(not that the above is thread-safe as is, but that's beside the point)</font>. Also, yes, I could instead subclass dict and implement __missing__, but that's only a solution for this particular case. The problem (if you agree it's a problem) occurs any time an exception is not actually an error, but rather a condition that just happens to be indicated by an exception.</div><div><br></div><div>It's unreasonable to expect all code in some_api to change their <font face="courier new, monospace">raise X</font> to <font face="courier new, monospace">raise X from None</font> (and it wouldn't even make sense in all cases). Is there a clean solution to avoid the unwanted exception chain in the error message?</div><div><br></div></div><div style="font-size:12.8px">If not, would it make sense to re-introduce <font face="courier new, monospace">sys.exc_clear()</font> for this purpose?</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">(I originally asked about this here: <a href="http://stackoverflow.com/questions/30235516/how-to-suppress-displaying-the-parent-exception-the-cause-for-subsequent-excep" target="_blank">http://stackoverflow.<wbr>com/questions/30235516/how-to-<wbr>suppress-displaying-the-<wbr>parent-exception-the-cause-<wbr>for-subsequent-excep</a> but find the answer unappealing.)</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Vashek</div><div style="font-size:12.8px"><br></div></div>