如何修复Python中'str' object is not callable错误(股票API场景)
解决股票API请求的TypeError及相关问题
让我们一步步排查并解决你的问题:
1. 核心错误原因分析
你遇到的TypeError: 'str' object is not callable最可能的两个诱因:
- 变量名冲突:如果你之前在运行环境中把
input这个内置函数名赋值成了字符串(比如input = 'AAPL'),后续调用input('Which stock you look for? ')就会报错——因为此时input是字符串而非函数。 - API请求配置错误:你使用的是Financial Modeling Prep (FMP) 的API,但请求头里用的是RapidAPI的
Host和Key,这完全不匹配,会导致API返回非JSON格式的错误内容(比如HTML字符串),后续处理JSON时可能引发连锁错误。
2. 代码修复方案
下面是修正后的完整代码,我标注了关键改动点:
import requests # FMP API的基础地址 main_api = 'https://financialmodelingprep.com/api/v3/company/profile' # 替换成你自己的FMP API Key(在FMP官网免费注册即可获取) FMP_API_KEY = 'your_fmp_api_key_here' # 优化变量名:用stock_symbol替代my_request,语义更清晰 stock_symbol = input('Which stock you look for? ') # 用f-string拼接URL,可读性更强 url = f"{main_api}/{stock_symbol}" try: # 正确的FMP API认证方式:用params传递apikey,而非错误的RapidAPI请求头 response = requests.get(url, params={'apikey': FMP_API_KEY}) # 检查请求是否成功(比如404、500错误会直接抛出异常) response.raise_for_status() # 解析JSON响应 response_json = response.json() # FMP的profile接口返回的profile是字典对象,不是数组,不需要[0]索引 if 'profile' in response_json and 'price' in response_json['profile']: price = response_json['profile']['price'] print(f"Today value: ${price:.2f}") else: print("无法获取该股票的价格信息,请检查股票代码是否正确。") except requests.exceptions.RequestException as e: print(f"请求出错:{e}") except ValueError: print("API返回的内容不是有效的JSON,请检查API配置。") except TypeError as e: print(f"数据处理出错:{e}")
关键改动说明:
- 修正API认证逻辑:FMP的API需要通过
apikey参数传递你的密钥,不需要RapidAPI的请求头,这是你之前请求失败的核心原因。 - 修复JSON取值错误:FMP的
/company/profile/{symbol}接口返回的profile是一个字典对象,而非数组,所以去掉了错误的[0]索引。 - 变量名优化:将
request改为response,避免和requests模块中的request类混淆;将my_request改为stock_symbol,让代码语义更清晰。 - 添加异常处理:覆盖了请求失败、JSON解析错误、数据结构异常等场景,能帮你快速定位问题。
3. 额外注意事项
- 确保你输入的股票代码是正确的(比如苹果是
AAPL,谷歌是GOOGL)。 - 如果使用FMP免费版API,注意请求频率限制,避免触发限流机制。
- 如果你之前确实误覆盖了
input函数,可以在Python交互环境中执行del input来恢复内置函数。
内容的提问来源于stack exchange,提问作者Emilio Vento
相关产品推荐
相关产品推荐

