调试器在您的WSGI应用程序中捕获到异常:获取KeyError KeyError:' main'追溯(最近的呼叫最后)

时间:2017-07-21 08:00:31

标签: python json python-2.7 api

KeyError异常

KeyError:' main' 追溯(最近的呼叫最后一次)

调试器在您的WSGI应用程序中捕获到异常。您现在可以查看导致错误的回溯。

要在交互式回溯和明文之间切换,您可以点击" Traceback"标题。从文本回溯中,您还可以创建它的粘贴。对于代码执行鼠标悬停在要调试的帧上,然后单击右侧的控制台图标。

from flask import Flask, render_template, request
import requests

app = Flask(__name__)

@app.route('/temperature', methods=['POST'])
def temperature():
    zipcode = request.form['zip']
    r = requests.get('http://api.openweathermap.org/data/2.5/weather?zip='+zipcode+',us&appid=fd38d62aa4fe1a03d86eee91fcd69f6e')
    json_object = r.json()
    temp_k = float(json_object['main']['temp'])
    temp_f = (temp_k - 273.15) * 1.8 + 32
    return render_template('temperature.html', temp=temp_f)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)

1 个答案:

答案 0 :(得分:0)

阅读API docs看起来您的代码应该正确读取JSON,因此您的API密钥不正确(我提供的密码不是,但是您可能已经编辑过它了)或您要求的邮政编码不存在。

无论哪种方式,您都应该提供错误页面:

@app.route('/temperature', methods=['POST'])
def temperature():
    zipcode = request.form['zip']
    r = requests.get('http://api.openweathermap.org/data/2.5/weather?zip='+zipcode+',us&appid=fd38d62aa4fe1a03d86eee91fcd69f6e')
    json_object = r.json()
    try:
        temp_k = float(json_object['main']['temp'])
        temp_f = (temp_k - 273.15) * 1.8 + 32
        return render_template('temperature.html', temp=temp_f)
    except KeyError:
        msg = 'Unknown error'
        try:
            msg = json_object['message']
        except KeyError:
            pass

        print(msg)
        return render_template('temperature_error.html', error=msg)

它会提供服务器提供的错误消息,因此会指出问题所在。