Python 'Return Outside Function' 错误

2024 年 8 月 29 日 | 阅读 6 分钟

在本 Python 教程中,我们将探讨如何解决“SyntaxError: return outside function python”(Python 中函数外的 return 语法错误)以及“can't assign to function call”(不能为函数调用赋值)等错误。在使用 Python 函数时,会出现函数外部返回的错误。

在编程中,函数是一个非常有用的工具。它们使我们能够将代码块打包并为其命名。通过在代码的其他位置调用这个代码块,我们可以根据需要重复执行所述任务。

此外,函数允许我们将计算的结果返回到 Python 程序的 main 部分。但是,我们在执行此操作时需要小心,因为一个错误可能会导致问题。

Return 语句

return 命令可以停止函数的执行,同时将返回的值传递回调用它的地方。例如:

代码

我们创建了 return_variable() 函数,该函数将变量赋值为 1。然后返回该值,并将其返回给主 Python 程序以进行进一步处理。

如果我们直接在 Python 解释器中执行此代码,调用该函数将立即显示 return 语句的结果。

代码

输出

1

函数调用执行函数块中的代码。然后,函数将 a 的结果返回给解释器。

Return Outside Function Python SyntaxError(Python 中函数外的 Return 语法错误)

如果 return 语句使用不当,Python 将会产生一个 SyntaxError,警告我们存在问题。有时语法错误可能会显示“return”超出函数范围。简单来说,我们试图在一个函数块之外声明一个 return 语句。

函数定义和 return 语句是紧密相关的。在接下来的部分中,我们将探讨 return 语句的一些错误用法以及相应的解决方案。

因缩进导致的 Return Outside Function Python SyntaxError(Python 中函数外的 Return 语法错误)

错误的缩进是导致 Return Outside Function Python SyntaxError(Python 中函数外的 Return 语法错误)的常见原因。Python 使用缩进来表示多个语句和操作属于同一代码块或作用域。如果 return 语句的缩进不正确,Python 就无法识别它属于哪个函数。

让我们看一个例子:

代码

输出

File "", line 3
  return c
    ^
SyntaxError: invalid syntax

我们正在尝试创建一个函数,用于对两个变量 a 和 b 求和。在将 c 设置为其他值之和后,我们希望返回此值。

然而,当我们输入 return c 时,Python 会引发语法错误。请注意插入符号(caret),它指示了问题所在。解释器并没有明确说明 return 语句有什么问题,但它确实存在问题。

如果我们将函数放入一个文件并从终端运行它,我们会看到更多信息:

Python 明确表示已在函数外部声明了 return 语句。

让我们更详细地检查我们定义的函数:

红线指示了函数定义开始的缩进级别。在接下来的几行中,我们应该将所有要定义为该函数一部分的内容缩进四个空格。Python 将第一行 c = a + b 包含在函数块中,因为它缩进了四个空格,是正确的。

但是,return 语句没有任何缩进。它与 def 关键字处于同一级别。由于没有缩进,Python 将其排除在函数块之外。然而,由于这与函数作用域的缩进级别不匹配,Python 会引发错误。所有 return 语句都必须包含在函数块内。

此时,return 语句应该缩进所需的空格数来解决此问题。

此时,return 语句不再越过红线。它已向右移动了四个空格,成为函数块的一部分。当我们直接在解释器中或从文件中运行此代码时,我们会得到正确的结果。

代码

输出

The returned value of the function:- 9

Python SyntaxError: Return Value Outside Function Due to Looping(Python 语法错误:因循环导致函数外返回值)

循环是此问题可能发生的另一个位置。循环允许程序员重复运行相同的代码块,而无需手动编写相同的指令。

循环的定义在外观上可能类似于函数的定义。因此,一些开发者可能会错误地认为两者具有相同的语法。下面是一个尝试返回结果的 while 循环示例:

代码

输出

File "", line 8
return c
^
SyntaxError: 'return' outside function

此代码片段建立了一个 while 循环,并将计数器初始化为 0。只要计数器的值小于 10,循环就会显示计数器的当前值。但是,当计数器等于 7 时,循环应该结束并将计数器值返回到 main 程序。

在这种情况下,我们可以清楚地看到 Python 解释器也引发了 Python 语法错误,显示消息“return outside function”。解释器将错误定位在第 4 行,即 our while loop body 的第四行,我们在这里写了“return c”。

由于我们只能在函数声明内部使用 return 关键字,因此会导致此错误。单个循环无法产生值。有两种方法可以处理此类问题。一种替代方法是使用 break 语句而不是 return,这将会在达到所需条件时终止循环。

代码

输出

0
1
2
3
4
5
6
7
8

现在,我们在循环的第四行使用了 break 而不是 return c。正如我们所见,循环在每次迭代时都会显示 c 的值并将其加一。循环在数字 8 处中断。由于我们在每次循环结束后更改值,因此 c 的值仍然存储着,并且我们可以将其显示出来以确认它等于八。

有一种方法可以将循环与 return 语句结合使用。只需将循环包含在函数声明中即可。这样,我们就可以保持 return c 而没有任何语法问题。

将 while 循环包含在函数中

代码

输出

0
1
2
3
4
5
6
7

尽管函数中的 while 循环仍然包含 return 语句,但由于整个循环体都包含在 count() 中,Python 会正确地将其与 count 函数声明关联起来。如果我们执行此代码,该函数将按预期工作。

我们将看到上面代码中的 return 语句正在做什么。

代码

输出

0
1
2
3
4
5
6
7
The result:- 7