我一直在尝试使用 .env 来保存我的关键 API 密钥。 访问 .env 时,我的代码失败,但使用 direct 则成功。 我想在我的代码中使用 .env 。 我的语法有什么问题???请建议工作模型。 我已经尝试了好几个星期了。 使用 .env 时收到的错误是: AttributeError: 'str' object has no attribute 'items'
**#My .env contains:**
headers={
'x-api-key':"sLEW68I3862.......75NKanjI"
}
**#My Python script is:**
import requests
from dotenv import load_dotenv, dotenv_values
import os
load_dotenv()
url="https://yfapi.net/v6/finance/quote"
**# Script fails when I retrieve the header/API this way**
# headers = os.getenv('headers')
# print(f'headers is: {headers}')
**# Script works when using this:** API not complete for security reasons
headers={
'x-api-key': "sLEW68I38624..........75NKanjI"
}
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()
两个问题。
第一:
**#My .env contains:**
headers={
'x-api-key':"sLEW68I3862.......75NKanjI"
}
.env 文件不应该是这样的。他们应该是这样的:
MYAPP_API_KEY="sLEW68I3862.......75NKanjI"
MYAPP_USER="myuser"
MYAPP_PASSWORD="mypassword"
...等等。详细信息是因为 env 文件或多或少应该是有效可执行的 shell 脚本(在类似 Linux 的平台上),这就是在 shell 中声明环境变量的方式。全部大写是首选样式,但技术上并不重要。
第二:
os.getenv
不会返回这样的字典。给定环境变量名称,它返回值或 None。您可以在示例中像这样使用它(使用以我上面向您展示的方式编写的 env 文件):
from dotenv import load_dotenv, dotenv_values
import os
load_dotenv()
url = "https://yfapi.net/v6/finance/quote"
API_KEY = os.getenv("MYAPP_API_KEY")
if not API_KEY:
raise SystemExit("MYAPP_API_KEY not provided, exiting!")
headers = {'x-api-key': API_KEY}
print(f'headers is: {headers}')