首页 > 解决方案 > python程序突然开始抛出KeyError

问题描述

我正在向服务器发出 API 请求,然后解析 json 响应并将其保存到 csv 文件中。一切正常,但现在突然,程序抛出错误。

奇怪的是,当我在笔记本电脑上运行相同的代码时,它可以工作,但在 vps 上,它会抛出异常(它刚才也在 vps 上工作,并且 vps 上没有任何可能导致异常的变化)。

我的python代码:

from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger
import requests
import json
import csv
from datetime import datetime


print("Started...")
def fn():
    print("        Writing Data...")
    session_id = "auZsJ4F2RsQNJxSPTMDt2238324"
    Outlook='http://www.myfxbook.com/api/get-community-outlook.json?session=' + session_id
    Outlook_response = requests.get(Outlook)
    Outlook_data = Outlook_response.json()['symbols']
    now = datetime.now()
    current_time = now.strftime("%H:%M")


    EURUSD=Outlook_data[0]
    SHORTPERC0=EURUSD['shortPercentage']
    LONGPERC0 =EURUSD['longPercentage']
    SHORTvolume0=EURUSD['shortVolume']
    longVolume0=EURUSD['longVolume']
    longPositions0=EURUSD['longPositions']
    shortPositions0=EURUSD['shortPositions']

    with open('myfile.csv', 'a', newline='') as file:
        writer = csv.writer(file)
        writer.writerow([current_time, SHORTvolume0, longVolume0, longPositions0, shortPositions0])

        print("        done...")

sched = BlockingScheduler()

# Execute fn() at the start of each minute.
sched.add_job(fn, trigger=CronTrigger(second=1))
sched.start()

这些是错误:

在此处输入图像描述

错误与 APScheduler 有关吗?还是关键错误?

json 响应如下所示:

{
"error": false,
"message": "",
"symbols": [{
    "name": "EURUSD",
    "shortPercentage": 45,
    "longPercentage": 55,
    "shortVolume": 23273.25,
    "longVolume": 28123.5,
    "longPositions": 74045,
    "shortPositions": 60996,
    "totalPositions": 135041,
    "avgShortPrice": 1.1709,
    "avgLongPrice": 1.1975
}

标签: python

解决方案


这可能对你有用:

    Request = 'https://www.myfxbook.com/api/login.json?email=username&password=password'
    response = requests.get(Request, verify = False)
    data = response.json()
    Session = data['session']
    path = ('https://www.myfxbook.com/api/get-community-outlook.json?session=' + Session)
    Outlook_response = requests.get(path, verify = False)
    Outlook_data = Outlook_response.json()['symbols']

不要因为发出许多请求而被阻止使用不同的用户代理标头

例如 :

headers = {
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
Outlook_response = requests.get(Outlook, headers=headers)
Outlook_data = Outlook_response.json()['symbols']

推荐阅读