Python method return. Interpreter bug?
<p>I had a method like this:</p>

<pre><code>def _play(self):
    carda = self._carda
    cardb = self._cardb

    if carda.is_trump and cardb.is_trump:
        winner = self._winbyrank() 
        return winner

    if not carda.is_trump and not cardb.is_trump:
        if carda.suite == cardb.suite:
            winner = self._winbyrank()
            return winner
        else:
            winner = self._winbyfirst()
            return winner

    if carda.is_trump and not cardb.is_trump:
        winner = self._winbytrump()
        return winner
    elif not carda.is_trump and cardb.is_trump:
        winner = self._winbytrump()
        return winner
</code></pre>

<p>This was <strong><em>occasionally</em></strong> (and to me unpredictably) returning <code>None</code>. When I replaced it with the following it fixed the problem. </p>

<pre><code>def _play(self):
    carda = self._carda
    cardb = self._cardb

    if carda.is_trump and cardb.is_trump:
        winner = self._winbyrank() 

    if not carda.is_trump and not cardb.is_trump:
        if carda.suite == cardb.suite:
            winner = self._winbyrank()
        else:
            winner = self._winbyfirst()

    if carda.is_trump and not cardb.is_trump:
        winner = self._winbytrump()
    elif not carda.is_trump and cardb.is_trump:
        winner = self._winbytrump()

    return winner
</code></pre>

<p>Isn't this a bug in the Python interpreter? Shouldn't the method <code>return</code> the <code>winner</code> value and exit the method rather than still moving 'till the end and returning <code>None</code>? I'm using Python 2.7.3</p>
