python - 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
解决方案
这是因为您的函数中有一个本地名称get_run_again
,get_run_again
该名称优先并隐藏了作为函数本身名称的全局名称。这使解释器感到困惑。
如果将变量名称更改为与函数名称不同;这个错误会消失。[或更改函数名称]
另一种 [不是好的] 方法是将get_run_again
函数中的变量声明为global
使用global
关键字。
推荐阅读
- extjs - 如何使用 store.sync 在 Ext JS 中为可编辑网格保存数据?
- mysql - MYSQL 需要在单个表上更快地分组
- sql-server - 在不确定我必须使用多少条记录时添加 PIVOT 值
- java - Hibernate 中的 CacheImpl
- anaconda - 安装底图后,我的 Anaconda Navigator 和 Spyder 无法启动
- regex - 正则表达式将电话号码与 00 和 + 匹配并且还允许空格
- java - 如何将@Projection 分配给@GetMapping spring servlet 端点?
- spring-boot - SpringBoot scanBasePackages 在多模块项目中不起作用
- python - 如何在 ipython 会话中从内存中恢复变量值?
- excel - 行趋势向上或向下切换