<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Jul 6, 2017 at 5:58 AM, Paul Moore <span dir="ltr"><<a href="mailto:p.f.moore@gmail.com" target="_blank">p.f.moore@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px">To use the (already</span><br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px">over-used) NameError example, Ken's proposal doesn't include any</span><br style="font-size:12.8px"><span style="font-size:12.8px">change to how NameError exceptions are raised to store the name</span><br style="font-size:12.8px"><span style="font-size:12.8px">separately on the exception.</span><br></blockquote><div><br></div><div>Maybe I'm misunderstanding you, but the proposal has a clear example of raising NameError and getting the name attribute from the exception instance:</div><div><br></div><div><span style="font-size:12.8px">    try:</span><br style="font-size:12.8px"><span style="font-size:12.8px">        raise NameError(name=name, template="name '{name}' is not defined.")</span><br style="font-size:12.8px"><span style="font-size:12.8px">    except NameError as e:</span><br style="font-size:12.8px"><span style="font-size:12.8px">        name = e.kwargs['name']</span><br style="font-size:12.8px"><span style="font-size:12.8px">        msg = str(e)</span><br style="font-size:12.8px"><span style="font-size:12.8px">        ...</span><br></div><div><span style="font-size:12.8px"><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Yes. Because he tries to extract the name component of a NameError,<br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
and yet that component isn't stored anywhere - under his proposal or<br>
under current CPython.<br></blockquote><div><br></div><div>I'm not sure what you mean by "extract", but the proposal calls for the name to be passed as a keyword argument (see above) and stored in self.kwargs:</div><div><br></div><div><span style="font-size:12.8px">    class BaseException:</span><br style="font-size:12.8px"><span style="font-size:12.8px">        def __init__(self, *args, **kwargs):</span><br style="font-size:12.8px"><span style="font-size:12.8px">            self.args = args</span><br style="font-size:12.8px"><span style="font-size:12.8px">            self.kwargs = kwargs</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">I think this code does what you're asking it to do, right?</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">(N.B. BaseException is written in C, so this Python code is presumably illustrative, not an actual implementation.)</span></div></div></div></div>