示例代码,请尝试忽略它看起来不必要地过于复杂-这是从实际代码中精简而成的方法,但准确地模仿了流程。
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
返回到if
中的menu_1()
语句中? setup()
(及随后的do_something()
)完成运行之后,do_something()
的返回值是否应该保留在if
语句中,因为它尚未完成?
答案 0 :(得分:1)
流为:
menu_1() => menu_2(task)
task
尚未在menu_1()
的范围内定义,因此无法定义。
您可能打算这样做:
def setup():
print("Setting up...")
return do_something()
.....
# in menu_1():
menu_2(setup())
请注意,由于setup
现在可以返回某些内容,因此可以使用该返回值。
答案 1 :(得分:0)
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'的变量中。