😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
在Python编程中,UnboundLocalError是一个运行时错误,它发生在尝试访问一个在当前作用域内未被绑定(即未被赋值)的局部变量时。 错误信息UnboundLocalError: local variable ‘xxx’ referenced before assignment指出变量xxx在赋值之前就被引用了。 这种情况通常发生在函数内部,尤其是在使用循环或条件语句时,变量的赋值逻辑可能因为某些条件未满足而未能执行,导致在后续的代码中访问了未初始化的变量。
我们来看看粉丝跟我说的具体的报错情况:
源代码:
scores = {'语文':89, '数学':95, '英语':80}
sum_score = 0
def get_average(scores):
for subject, score in scores.items():
sum_score += score
print('现在的总分是%d'%sum_score)
ave_score = sum_score/len(scores)
print('平均分是%d'%ave_score)
get_average(scores)
运行后会显示报错:UnboundLocalError: local variable ‘xxx’ referenced before assignment
把变量声明称global,global sum_score。
scores = {'语文':89, '数学':95, '英语':80}
sum_score = 0
def get_average(scores):
global sum_score
for subject, score in scores.items():
sum_score += score
print('现在的总分是%d'%sum_score)
ave_score = sum_score/len(scores)
print('平均分是%d'%ave_score)
get_average(scores)
#print(scores.items())
#for subject, score in scores.items():
# print('{} and {} and {}'.format(subject,score,type(score)))
# sum_score += score
# print(sum_score)
错误示例:
def get_value(condition):
value # 尝试访问变量,但尚未初始化
if condition:
value = 10
return value
print(get_value(False)) # 引发UnboundLocalError
错误示例:
def print_numbers(n):
for i in range(n):
print(number) # 错误地在循环外部引用了变量
number = i
print_numbers(5)
错误示例:
def find_first_even(numbers):
for num in numbers:
if num % 2 == 0:
result = num
break
return result
print(find_first_even([1, 3, 5])) # 引发UnboundLocalError,因为可能没有找到偶数
def get_value(condition):
value = None # 初始化变量
if condition:
value = 10
return value
print(get_value(False)) # 输出None,而不是引发错误
解决方案:
def print_numbers(n):
for i in range(n):
number = i # 将初始化移动到循环内部
print(number)
print_numbers(5)
解决方案:
def find_first_even(numbers):
result = None # 初始化变量
for num in numbers:
if num % 2 == 0:
result = num
break
return result
print(find_first_even([1, 3, 5])) # 输出None,因为没有偶数