为何出现‘module 'a.b' has no attribute 'position(1,2,3)'’错误?如何修复?
问题分析与解决方案
错误根源
你遇到的报错核心是逻辑颠倒:
- 你错误地把方法调用后的结果字符串当成了模块
b的属性名,而实际上position才是b的合法方法属性,调用b.position(i,2,3)才能得到你需要的geo键值。 - 第一段代码里
c = position(i,2,3)未定义position,后续用str(c)去getattr(b, ...)更是完全偏离正确逻辑,导致试图访问b中不存在的"position(1,2,3)"属性。
修正后的代码
循环场景的正确写法
直接调用b.position(i,2,3)获取键值,再从geo中取值:
import a from a import b for i in range(1,10): # 先调用b的position方法,得到geo对应的键 key = b.position(i,2,3) # 用键从geo中取目标值 position = geo[key] # 这里可添加对position的后续处理逻辑
函数封装的正确写法
如果要用函数封装,需要让函数接收参数并返回正确的键值:
import a from a import b def get_geo_key(obj, i): # 调用obj的position方法,传入参数i、2、3 return obj.position(i,2,3) for i in range(1,10): position = geo[get_geo_key(b, i)]
为什么无报错的代码能正常运行
position = geo[b.position(1,2,3)]是正确逻辑:
- 先执行
b.position(1,2,3)调用方法,得到一个键值 - 再用这个键值从
geo字典(或类似结构)中取出对应的值
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

