You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用.env存储API密钥报AttributeError的解决方法

问题排查与解决方案

问题本质

代码报错AttributeError: 'str' object has no attribute 'items'的核心原因:

  • .env文件的内容会被os.getenv()读取为字符串类型,而非Python字典。你原.env中写的Python字典语法headers={...},读出来后是一段包含字典代码的字符串,不是真正的字典对象。
  • requests.request()的headers参数要求传入字典类型,内部会调用字典的items()方法处理键值对,字符串没有该方法,因此触发报错。

修正方案(推荐第一种)

方案1:单独存储API密钥(更规范)

这种方式避免解析字符串的麻烦,也便于单独管理密钥:

  1. 修改.env文件内容,仅存储API密钥:
X_API_KEY=sLEW68I3862.......75NKanjI
  1. 修改Python脚本,读取密钥后手动构建headers字典:
import requests
from dotenv import load_dotenv
import os

load_dotenv()

url = "https://yfapi.net/v6/finance/quote"

# 读取密钥并构建headers字典
api_key = os.getenv('X_API_KEY')
headers = {'x-api-key': api_key}
print(f'headers is: {headers}')

ticker_List = ("AAPL", "AMZN", "F", "T")

for ticker in ticker_List:
    querystring = {"symbols": ticker}
    response = requests.request("GET", url=url, headers=headers, params=querystring)
    print(response.text)
    print("________________")
    print()

方案2:存储完整headers字符串并解析(备选,不推荐)

如果非要在.env中存储完整headers结构,可采用JSON格式存储后解析为字典:

  1. 修改.env为JSON格式字符串:
HEADERS={"x-api-key":"sLEW68I3862.......75NKanjI"}
  1. 修改Python脚本,用json.loads()解析字符串为字典:
import requests
from dotenv import load_dotenv
import os
import json

load_dotenv()

url = "https://yfapi.net/v6/finance/quote"

# 读取JSON字符串并转换为字典
headers_str = os.getenv('HEADERS')
headers = json.loads(headers_str)
print(f'headers is: {headers}')

ticker_List = ("AAPL", "AMZN", "F", "T")

for ticker in ticker_List:
    querystring = {"symbols": ticker}
    response = requests.request("GET", url=url, headers=headers, params=querystring)
    print(response.text)
    print("________________")
    print()

注意事项

  • .env是简单键值对格式,不要写入Python代码语法(如字典的{})。
  • 务必将.env添加到版本控制忽略列表(如.gitignore),防止密钥泄露。

内容的提问来源于stack exchange,提问作者Terry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:47:01