<p>您正在递归调用函数-<code>inventendfunction()</code>-但从未返回从递归调用中获得的结果,因此它不会返回任何内容,您还需要返回递归调用返回的结果-</p>
<pre><code>try:
list2[1]
print "inside try %r" %list2
return inventedfunction(list2)
</code></pre>
<p>另外,有一个空的<code>except</code>是不好的,您应该考虑在调用<code>inventedfunction()</code>时会出现什么异常,并且只有那些异常除外。在</p>
<hr/>
<p>因为在你的评论里-</p>
<blockquote>
<p>I guess my problem doesn't have to do with the function but understanding how recursion works.</p>
</blockquote>
<p>让我们以一个简单的函数<code>a()</code>为例,它执行递归,并且与您的类似-</p>
^{pr2}$
<p>正如您在上面看到的返回<code>0</code>的简单示例,为什么?让我们一步一步来-</p>
<pre><code>main -> a(0)
</code></pre>
<ol>
<li><p>调用函数<code>a(0)</code>,这里的<code>i</code>是0,所以转到else部分,调用<code>a(1)</code>。在</p>
<pre><code>main -> a(0) -> a(1)
</code></pre></li>
<li><p>现在,您又进入了<code>a</code>,其中<code>i</code>为<code>1</code>,现在转到<code>if</code>部分,这将返回<code>"Hello"</code>。在</p>
<pre><code>main -> a(0) #Returned back to a(0)
</code></pre></li>
<li><p>现在,在返回之后,您不会直接返回到您调用<code>a(0)</code>的<code>main()</code>,也不会返回到函数<code>a(1)</code>被调用的位置,而且是从<code>a(0)</code>内部调用的,所以您返回到<code>a(0)</code>,执行继续,但是由于<code>a(0)</code>没有返回任何内容,所以您将在<code>main</code>中获得默认返回值,该值是“无”。</p></li>
</ol>
<hr/>
<p>对于您的示例,您需要添加<code>return inventedfunction(list2)</code>,以便它正确地返回递归调用的结果,否则递归调用的返回值将被丢弃而不会返回。示例-</p>
<pre><code>def inventedfunction(list1):
list2=list1[:-1]
if len(list2)!=1:
return inventedfunction(list2)
else:
return list2
</code></pre>