首页 > 解决方案 > Pylint 代码检查器一直说“从外部范围重新定义名称'get_run_again'(第 22 行)(重新定义的外部名称)”?这是什么意思

问题描述

这是我的主要功能和它一直有问题的另一个功能

def main():
    """
    Main algorithm to calculate monthly budget
    """

    # To run again variable
    run_again = 'Y'

    # Expense variables, 0 to quit
    while run_again == 'Y':
        total_budget = budget()
        expense_val = expense()
        while expense_val != 0:
            total_budget = total_budget - expense_val
            expense_val = expense()

        print('The leftover budget is $', '%0.2f' % total_budget, sep='')

        run_again = get_run_again()


def get_run_again():
    """
    Asks the user to validate Yes and No

    arguments:
    None

    Returns:
    Yes and No
    """
    # Ask to enter Y for "yes, run again" or N for "no, quit"
    get_run_again = str(input('Y for yes,or N for no: '))

    # Ask user to user to validate yes or no
    while get_run_again != 'Y' and get_run_again != 'N':
        print('Run again?')
        get_run_again = str(input())

    return get_run_again

标签: pythonpylint

解决方案


这是因为您的函数中有一个本地名称get_run_againget_run_again该名称优先并隐藏了作为函数本身名称的全局名称。这使解释器感到困惑。

如果将变量名称更改为与函数名称不同;这个错误会消失。[或更改函数名称]

另一种 [不是好的] 方法是将get_run_again函数中的变量声明为global使用global关键字。


推荐阅读