示例代码,试着忽略它看起来是不必要的过于复杂-这是从实际代码中下来的方式,但完全模仿流程。
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:局部变量‘之前引用的任务’“。
为什么do_something() 不将变量task返回到menu_1()中的if语句?一旦setup() (以及随后的do_something())完成运行,do_something()的返回值不应该留在if语句中吗?
发布于 2018-12-06 18:17:45
流程是:menu_1() => menu_2(task)
task尚未在menu_1()的作用域中定义,因此无法定义。
您可能打算这样做:
def setup():
print("Setting up...")
return do_something()
.....
# in menu_1():
menu_2(setup())注意,由于setup现在返回某些内容,所以可以使用该返回值。
发布于 2018-12-06 18:40:46
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()调用do_something(),setup()调用do_something()。现在'do_something()‘将返回任务的值,但不是从'setup()’函数返回到menu_1(),然后在menu_1()中,必须将返回的值存储在一个名为'task‘的变量中。
https://stackoverflow.com/questions/53657415
复制相似问题