Python自定义函数调用后出现NameError:row变量未定义求助
问题原因与解决方法
核心问题
你调用函数时没接收返回值,而且函数内部的row是局部变量——局部变量只能在函数内部使用,外部代码根本访问不到。你现在只调用了row_number_calculater(cycle),但没把函数返回的行号存到外部的row变量里,所以后续代码用row的时候自然会报未定义的错误。
第一步:修复函数调用
把调用代码改成这样,接收函数返回的行号:
for i in data: cycle +=1 # 把函数返回值赋值给外部的row变量 row = row_number_calculater(cycle) if i == "noop": if ((cycle-1)-(row*wide)) == X or ((cycle-1)-(row*wide)) == (X-1) or ((cycle-1)-(row*wide)) == (X+1): Picture[row][(cycle-1)-(row*wide)] = "#" else: Picture[row][(cycle-1)-(row*wide)] = "."
第二步:优化函数本身
你的函数还有个隐患:如果cycle超出120,会没有进入任何if/elif分支,导致row未定义,返回时会报错。可以加个默认分支,或者简化计算逻辑:
优化版(保留原逻辑并补全边界)
def row_number_calculater(cycle): if 1 <= cycle <= 40: row = 0 elif 41 <= cycle <= 80: row = 1 elif 81 <= cycle <= 120: row = 2 # 处理超出范围的情况,比如默认返回3或者根据需求调整 else: row = 3 return row
简化版(更高效的计算方式)
其实不用一堆条件判断,直接用整数除法就能算出对应行号,逻辑和原函数完全一致:
def row_number_calculater(cycle): # (cycle-1)是为了让1-40对应0,41-80对应1,以此类推 return (cycle - 1) // 40
内容的提问来源于stack exchange,提问作者chrislmonster
相关产品推荐
相关产品推荐

