Python运行报AttributeError: 'list' object has no attribute 'replace'如何解决
报错原因
AttributeError: 'list' object has no attribute 'replace' 报错的核心原因是你构造的name_variations_provisional列表中存在嵌套的子列表,并非所有元素都是可调用replace方法的字符串:
- 代码中
name_variations_provisional.append(organisation['organization']['aliases'])逻辑存在问题:ROR接口返回的aliases字段本身就是存储多个机构别名的列表,append方法会把整个列表作为单个元素塞入目标列表,最终name_variations_provisional会形成「字符串+子列表+字符串」的嵌套结构,后续遍历到子列表时调用replace方法自然报错。 - 额外注意:不要用
str作为循环变量名,str是Python内置的字符串类型关键字,用作变量名会覆盖原生功能,可能引发其他隐性问题。
修复方案
把添加别名的append方法改为extend,extend会逐个取出别名列表里的元素添加到目标列表,不会产生嵌套结构,同时替换循环变量名即可,修正后代码如下:
import json import requests search_terms = input('Name of university: ') parameters = {"affiliation": search_terms} response = requests.get("https://api.ror.org/organizations", params=parameters) ror_payload = response.json() name_variations_provisional = [] for organisation in ror_payload['items']: if organisation['chosen']==True: name_variations_provisional.append(organisation['organization']['name']) # append改为extend,避免嵌套子列表 name_variations_provisional.extend(organisation['organization']['aliases']) for relationship in organisation['organization']['relationships']: if relationship['type'] == 'Child': name_variations_provisional.append(relationship['label']) # 替换循环变量名,避免和内置str关键字冲突 name_variations=[item.replace("C", "") for item in name_variations_provisional] print(name_variations)
内容的提问来源于stack exchange,提问作者user1222447
相关产品推荐
相关产品推荐

