python中的NameErrors和函数

时间:2015-04-04 14:43:04

标签: python function python-3.x nameerror

我不断得到一个NameError虽然我已经定义了一个术语,问题出在" day"在第28行。

def today():
    day = input("What day is it?")

    if "sunday" in day:
        day = 0
    elif "monday" in day:
        day = 1
    elif "tuesday" in day:
        day = 2
    elif "wednesday" in day:
        day = 3
    elif "thursday" in day:
        day = 4
    elif "friday" in day:
        day = 5
    elif "saturday" in day:
        day = 6

    else:
        today()
today()

days_on_vacation = int(input("How many days will you be on vacation?   "))

days_to_add_to_day = days_on_vacation % 7

day += days_to_add_to_day

我已经在函数today()中给了一天值了吗?为什么我被告知它没有定义?

1 个答案:

答案 0 :(得分:3)

您在函数中指定的名称是 locals ;它们在功能之外是不可见的。

分享该结果的最佳方法是返回函数中的值,以便您可以在调用时将其分配给变量:

def today():
    # ...
    return day

result = today()

然后result变量保存函数返回的值。您也可以在那里使用名称day,但那是一个与函数内部变量不同的变量。

你通过使用递归函数调用确实使问题变得复杂;然后你还需要确保沿着链传递递归调用的结果:

def today():
    # ...
    else:
        return today()
    return day

但是,最好不要依赖递归;一个简单的enless循环会做得更好;从函数返回将自动结束循环:

def today():
    while True:
        day = input('...')
        # ...
        else:
            # not valid input, restart the loop
            continue

        # input was valid, return the result
        return day