【问题标题】:Python error: 'return' outside functionPython 错误:“返回”外部函数
【发布时间】:2015-02-09 13:20:07
【问题描述】:

我在使用 python 时遇到问题,我不知道为什么会发生。

我的代码如下:

def getServers(baseDN=''):
    from pyad import adquery
    q = adquery.ADQuery()
    q.execute_query(
        attributes=["distinguishedName", "description"], \
        where_clause="objectClass = 'Computer'", \
        base_dn=baseDN)
    #Lo que devuelve es un generator campeon :) Podes pasarlos con next o con un for.
    return [server['distinguishedName'].split(',')[0].strip('CN=') for server in q.get_results()] # Y aca lo parseo con un for

所以基本上,如果我通过执行 py 文件来执行这段代码,它就可以完美运行。但是,如果我尝试在控制台上使用它,我会收到“返回外部函数”错误,并且我无法弄清楚如何解决它,因为我试图通过在控制台上运行片段来调试我的代码:(

感谢您的帮助:)

【问题讨论】:

  • 您没有在控制台中正确缩进代码,因此文本不在函数范围内。当您到达 return... 时,这会成为一个问题,因为 return 必须在函数范围内。
  • 附带说明,这里不需要续行,python 忽略括号内的换行符。
  • 尝试删除评论##Lo que devuelve es u ...
  • 我同意这可能是一个简单的缩进问题,但如果不是,请在输入代码并收到错误后提供控制台的屏幕截图。
  • 嗨,伙计们。 Milind,问题是评论,我只是把评论移到函数之外,现在它工作正常:)

标签: python function return


【解决方案1】:

问题是返回之前的评论。由于某种原因,控制台不能很好地理解延续。因为我只是对测试代码感兴趣,所以我只是删除了评论。

【讨论】:

  • 您使用的是哪个控制台?假设所有缩进都是正确的,它应该能够正确处理注释。评论的语法似乎没有任何问题。
  • 嗨,Bebop,请检查其他答案的 cmets,因为 cmets 正在重复。
【解决方案2】:

解析器认为函数在return语句之前就结束了,这意味着你的缩进可能存在某种问题。确保每行之前有相同数量的空格/制表符(或确保您没有混合空格和制表符、某些行上的空格、其他行上的制表符)。它也可能有助于摆脱注释行。

编辑:删除评论解决了您的问题这一事实表明您使用的控制台有缺陷,因为语法是正确的。

【讨论】:

  • 我没有投反对票,但在我们获得更多信息之前,这似乎只是猜测。
  • 嗨,bebop,不知何故,这是由于缩进,但不是直接缩进本身,因为该行已正确缩进,但控制台由于某种原因不理解缩进,我通过移动解决了它在函数之外进行注释,至少在我在控制台上进行测试时。
  • @Kevin 我还在学习 python,但这似乎很简单。除了我建议的两点之外,您还能想到可能导致此错误的其他内容吗?
  • 我自己的理论是:1)OP 在控制台中写的东西与他在这里写的不同,在这种情况下,问题应该作为错字关闭而不是被回答;或 2) OP 正在使用非标准控制台或 REPL,其编程不当,因此在提供完全正确的代码时行为不正确。虽然“摆脱注释行”在这种情况下确实帮助了 OP,但它并没有真正解决问题的根源,因为函数内部的 cmets应该在控制台上正常工作。跨度>
  • 如果未来的用户遇到同样的问题并在这里结束,他们将得出的结论将是“永远不要在函数中使用 cmets”而不是“切换到有效的 REPL”(或不管真正的问题是什么),这对我来说似乎是一种耻辱。
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 2020-09-06
  • 2012-03-07
相关资源
最近更新 更多