<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="&#1;" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="Section1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Please consider this program:<o:p></o:p></p>
<p class="MsoNormal">===<o:p></o:p></p>
<p class="MsoNormal">def f():<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield 45<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = yield 123<o:p></o:p></p>
<p class="MsoNormal">===<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">When running pylint on it, it crashes with this backtrace:<o:p></o:p></p>
<p class="MsoNormal">===<o:p></o:p></p>
<p class="MsoNormal">Traceback (most recent call last):<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/bin/pylint&quot;, line 4, in &lt;module&gt;<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; lint.Run(sys.argv[1:])<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/pylint/lint.py&quot;, line 881, in __init__<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; linter.check(args)<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/pylint/lint.py&quot;, line 500, in check<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; self.check_astng_module(astng, checkers)<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/pylint/lint.py&quot;, line 577, in check_astng_module<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; if implements(checker, IASTNGChecker)])<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/pylint/lint.py&quot;, line 594, in astng_events<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; self.astng_events(child, checkers, _reversed_checkers)<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/pylint/lint.py&quot;, line 594, in astng_events<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; self.astng_events(child, checkers, _reversed_checkers)<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/pylint/lint.py&quot;, line 594, in astng_events<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; self.astng_events(child, checkers, _reversed_checkers)<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/pylint/lint.py&quot;, line 591, in astng_events<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; checker.visit(astng)<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/logilab/astng/utils.py&quot;, line 320, in visit<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; method(node)<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/pylint/checkers/format.py&quot;, line 267, in visit_default<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; prev_sibl = node.previous_sibling()<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/logilab/astng/nodes.py&quot;, line 251, in previous_sibling<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; stmts = self.parent.child_sequence(self)<o:p></o:p></p>
<p class="MsoNormal">&nbsp; File &quot;/usr/lib/python2.5/site-packages/logilab/astng/nodes.py&quot;, line 216, in child_sequence<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; raise ASTNGError(msg % (repr(child), repr(self)))<o:p></o:p></p>
<p class="MsoNormal">logilab.astng._exceptions.ASTNGError: Could not found &lt;_ast.Yield object at 0x1034890&gt; in &lt;_ast.Assign object at 0x1034810&gt;'s children<o:p></o:p></p>
<p class="MsoNormal">&nbsp;===<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">In previous_sibling(), the Yield node is looked up in its parent. That works for line 2 where yield is used as a statement, but fails for line 3 where yield is used as an expression.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">The _ast module always considers yield an expression (both for the line 2 and line 3 case). Taking that as inspiration, I moved &#8220;Yield&#8221; from STMT_NODES to ALL_NODES in &#8220;nodes.py&#8221; in astng. That fixes the crash, but I don&#8217;t know if there
 is other code that will break when &#8220;yield&#8221; is never considered a statement.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">By the way, the docstring of previous_sibling() looks like it belongs with next_sibling() and vice versa.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Bye,<o:p></o:p></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maarten<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<br>
<hr>
<font face="Arial" color="Gray" size="1">The information contained in this message may be confidential and legally protected under applicable law. The message is intended solely for the addressee(s). If you are not the intended recipient, you are hereby notified
 that any use, forwarding, dissemination, or reproduction of this message is strictly prohibited and may be unlawful. If you are not the intended recipient, please contact the sender by return e-mail and destroy all copies of the original message.<br>
</font>
</body>
</html>