2015-11-14 93 views
1
def main(): 
     tests = get_initial_input(tests) 
     assignments = get_initial_input(assignments) 
     exercises = get_initial_input(exercises) 
     labs = get_initial_input(labs) 
     finals = get_initial_input(finals) 
     print(tests, assignments, labs) 


def get_initial_input(x): 
     val = int(input("How many", x , "were there? ")) 
     return val 

main() 

我不断收到错误之前引用:局部变量“X”分配

UnboundLocalError: local variable 'tests' referenced before assignment 

我已经尝试了很多不同的东西,试图让测试去get_initial_input(),但它说,它被引用在分配之前。

当我试图定义它的第一行代码时,这怎么可能?

+1

是的,但当您调用'get_initial_input(tests)'时,'tests'不存在。你期望它打印什么? – Doorknob

+0

你从来没有在变量'tests = get_initial_answer(tests)'后面定义变量'tests',所以'test'在执行该行时是未定义的。 – ppperry

+0

另外,就像一个附注,我认为'get_initial_input(tests)',你的意思是'get_initial_input(“tests”)'和val = int(input(“有多少”,x,“那里? ))'as'val = int(input(“有多少”+ x +“在那里?”))'修改后的工作代码:https://repl.it/B0Ex –

回答

1

我想你正在尝试将字符串传递给你的函数,该函数在输入提示中使用。一个文字字符串总是被引号括起来。

tests = get_initial_input("tests") 

这将是更容易调试,如果你使用了正确的变量名称 - 如label - 在你的函数参数。

7

当你使用:

tests = get_initial_input(tests) 

这种情况发生的第一件事就是,Python试图评估这个:

get_initial_input(tests) 

tests没有定义呢,所以你得到的UnboundLocalError

+0

但这就是我想要定义测试的方式。我做了一些与此类似的事情,我无法弄清楚为什么它不起作用。 –

+0

对不起,但Python不支持'x = x'形式的递归变量定义。你需要将其定义为某种东西。也许你想使用字符串值而不是变量名? – Alexander

0

您正在将未分配的变量tests传递给get_initial_input()函数。所以,这就是你收到错误的原因。

如果您需要内部get_initial_input()功能X参数的默认值,然后明确地定义它:

def get_initial_input(x=5): 
    ... 

而且在main()称它为tests变量不带参数:

tests = get_initial_input() 

如果您需要名称(如'How many tests') - 然后传递字符串,而不是汽车的功能:

tests = get_initial_input('tests')