前提・実現したいこと
atom(python3)で天気のデスクトップアプリを作っています
発生している問題・エラーメッセージ
出てきたウィンドウに都市名を入力しても天気が表示されない エラーメッセージ: Exception in Tkinter callback Traceback (most recent call last): File "/Users//opt/anaconda3/lib/python3.8/tkinter/__init__.py", line 1883, in __call__ return self.func(*args) File "<ipython-input-8-389afaedc2a7>", line 6, in getWeather weather = json_data['weather'][0]['main'] KeyError: 'weather'
該当のソースコード
python3
ソースコード: import tkinter as tk import requests canvas = tk.Tk() canvas.geometry('700x500') canvas.title("Today's Weather") a = ('Arial black',20,'bold') b = ('Arial black',40,'bold') def getWeather(canvas): city = textField.get() api = 'https://api.openweathermap.org/data/2.5/weather?q='+city+'&appid={}' json_data = requests.get(api).json() weather = json_data['weather'][0]['main'] temp = int(json_data)['main']['temp']- 273.15 min_temp = int(json_data['main']['temp_min']- 273.15) max_temp = int(json_data['main']['temp_max']- 273.15) final_info = weather + '\n' + str(temp) + '°C' final_data = '\n' + '最低気温:' + str(min_temp) + '°C' + '\n' + '最高気温:' + str(max_temp) + '°C' label1.config(text = final_info) label2.config(text = final_data) textField = tk.Entry(canvas, justify = 'center', width = 20, font = b) textField.pack(pady = 30) textField.bind('<Return>',getWeather) label1 = tk.Label(canvas, font=b) label1.pack() label2 = tk.Label(canvas, font=a) label2.pack() canvas.mainloop()
試したこと
再起動、スペル確認、ターミナルからのファイル実行
補足情報(FW/ツールのバージョンなど)
macos 11.5
atom
python3.9.1
コード内のappidは本来入力しています
json_dataの中身が分かるように、print(json_data)した結果を追記ください。
お待たせしました よろしくお願いします。
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-11-86382d097067> in <module>
----> 1 print(json_data)
NameError: name 'json_data' is not defined
ソースの先頭に入れてますかねこれ...
変数宣言している箇所より下に書かないと意味ないですよ。