Python3变量传递问题



示例代码,尽量忽略它似乎不必要地过于复杂——这与实际代码相比是非常简单的,但完全模拟了流程。

def setup():
print("Setting up...")
do_something()
def do_something():
task = str(input("Enter a task to do: "))
try:
print("Doing {}...".format(task))
except:
print("Failed to do {}...".format(task))
finally:
return task
def choose_2(choice):
print("You chose {}".format(choice))
def menu_1():
choice = int(input("Choose 1 or 2: "))
if choice == 1:
setup()
menu_2(task)
menu_1()

但是,程序返回">UnboundLocalError:分配前引用的局部变量'task'">

为什么do_something()不是将变量task返回到menu_1()中的if语句?一旦setup()(以及随后的do_something()(完成运行,do_something()的返回值是否应该保留在if语句中,因为它还没有完成?

流程为:menu_1() => menu_2(task)

CCD_ 10未在CCD_ 11的范围内定义,因此无法定义。

你可能打算这样做:

def setup():
print("Setting up...")
return do_something()
.....
# in menu_1():
menu_2(setup())

请注意,因为setup现在返回一些东西,所以可以使用该返回值。

setup((和menu_1((函数应该这样更改:

def setup():
print("Setting up...")
do_something()
def menu_1():
choice = int(input("Choose 1 or 2: "))
if choice == 1:
task=setup()
menu_2(task)

说明:menu_1((调用setup((,setup(((调用do_something((。现在"do_something(("将返回task的值,但您不会将其从"setup(("函数返回到menu_1((,然后在menu_1(((中,您必须将返回的值存储在名为"task"的变量中。

最新更新