Python3变量传递问题

时间:2018-12-06 18:14:30

标签: python python-3.x variables return try-catch

示例代码,请尝试忽略它看起来不必要地过于复杂-这是从实际代码中精简而成的方法,但准确地模仿了流程。

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语句中,因为它尚未完成?

2 个答案:

答案 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'的变量中。