Python:为什么if分支内可正常调用方法,分支外调用触发AttributeError
问题解答
- 报错的核心原因:错误提示
AttributeError: 'NoneType' object has no attribute 'describe'已经明确说明了问题——你尝试调用describe()方法的inhabitant变量是None空值,空值不具备任何类属性和方法,直接调用方法必然会抛出异常。 - 同一段代码在分支内外表现不同的原因:
inhabitant的取值来自current_room.get_character(),这个方法的返回值不是永远都是有效的Character/Enemy实例:当当前房间没有设置角色时,方法会返回None。- 放在if分支外的代码没有任何校验逻辑,程序每次循环都会直接执行这行代码,只要某次循环中房间没有角色、
get_character()返回None,就会触发报错。 - 你写的
if inhabitant is not None:分支做了严格的非空校验:只有当inhabitant确实是有效的角色实例时,才会执行分支内的print(inhabitant.describe()),从逻辑上彻底避免了空值调用方法的场景,所以分支内的代码永远不会触发该报错。
你可以取消注释#print(inhabitant)这行再运行,就会发现报错前控制台会先打印None,正好对应那次循环get_character()返回了空值的情况。
内容的提问来源于stack exchange,提问作者Japs6901
相关产品推荐
相关产品推荐

