函数内已给变量赋值为什么仍报local variable referenced before assignment错误?
报错原因
这个错误的核心诱因是传入的参数ls2为空可迭代对象时,for循环不会执行:你对变量c的所有赋值逻辑都写在for循环内部,这种场景下c从始至终没有被定义,后续执行if c==0的判断读取c时就会触发该报错。
即使ls2不为空,也建议在for循环外先给c赋初始值,避免后续修改循环逻辑时再踩同类坑。
修复方案
这里提供两种可行的修改方式:
- 第一种:提前初始化
c的默认值,和原有逻辑保持完全兼容:
def p3(x,y,ls2): c = 1 # 提前设置默认值,对应未匹配到符合条件元素的场景 for i in ls2: if abs(i[0]-x)==abs(i[1]-y): c=0 break return False if c == 0 else True
- 第二种:更简洁的优化写法,用Python内置
any()函数实现相同逻辑,不需要额外定义变量c,天然兼容空ls2场景:
def p3(x,y,ls2): return not any(abs(i[0]-x) == abs(i[1]-y) for i in ls2)
内容的提问来源于stack exchange,提问作者Tianyu He
相关产品推荐
相关产品推荐

