Python Forum
Getting "name 'get_weather' is not defined error and no json_data returned?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Getting "name 'get_weather' is not defined error and no json_data returned?
#1
I'm stumped again. Been trying different ways of getting this to work and its solution is evading me. LOL
Just learning and am running Python 3.9.7
My next hurdle is to get the api key from it once and store in config.ini permanently and then get the user interface window up and running.

from tkinter import *
from configparser import ConfigParser
import requests

name = input("Name?: ")

age = input("Age?: ")

weightLBS = input("Weight in lbs?: ")

diagnosed = input("Have you been diagnosed with MD by doctor?: ")

api_key = input("API key? ")

#Weather API json and data pull

url = "http//api.openweathermap.org/data/2.5/weather?q={},{}&appid={}"

city = input("City where you are?: ")

state = input("State where you are? ")

api_key = config_file = 'config.ini'

config = ConfigParser()

config.read('config_file')

#api_key = input(api_key)
#(config.ini[api_key][key])


def get_weather(city, state, api_key):
    result = requests.get_weather(url.format(city, state, api_key))  
    if result:
        print(result.json_data)

        
        json_data = result.json()
        city = json['name']
        temp_kelvin = json['main']['temp']
        temp_min_kelvin= json['main']['temp_min']
        temp_max_kelvin = json['main']['temp_max']
        temp_fahrenheit = (temp_kelvin - 273.15) * 9 / 5 + 32
        temp_min_fahrenheit = (temp_min_kelvin - 273.15) * 9 / 5 + 32
        temp_max_fahrenheit = (temp_max_kelvin - 273.15) * 9 / 5 + 32
        humidity = json['main']['humidity']
        pressure = json['main']['pressure' *  0.0295301]
        condition = json_data['weather'][0]['main']
        #max_press = int(json_data['main']['pressure_max'])
        #min_press = int(json_data['main']['pressure_min'])
        final = (name, city, state, age, weight, diagnosed, temp_fahrenheit, temp_min_fahrenheit, temp_max_fahrenheit, humidity, pressure, condition)
        return final

print(get_weather(city, state, api_key))       
Reply
#2
It is not clear to me what you are asking. You are getting an error message? Then please show the complete error stack trace (in error tags).
You import requests. But does "requests" have a method "get_weather"?
(Because in line 34 you call requests.get_weather().)
Reply
#3
I showed you a working function in your last Thread
Now you mess it up with serval errors one mention bye ibreeden and call json should be json_data.
All the globals values should not just get be used in function if there not are in function parameter.
As mention in last post do small teste as your function now it's not working at all,
then you stop and fix function before adding ConfigParser and GUI.

To show a example with ConfigParser using my code from last Thread.
As api_key is personal to you should not need to type in every time,have in api_key in the .ini file.
key.ini:
[key]
api_key = xxxxxxxxxxxxx
import requests
from configparser import ConfigParser

def get_weather(city, api_key):
    api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
    json_data = requests.get(api).json()
    return json_data

def get_api_key():
    config = ConfigParser()
    config.read('key.ini')
    api_key = config['key']['api_key']
    return api_key

if __name__ == '__main__':
    city = 'Winnsboro,Louisiana'
    weather = get_weather(city, get_api_key())
    print(weather['name'])
    print(weather['main']['temp'])
    print(weather[ 'weather'][0]['description'])
Output:
Winnsboro 295.99 overcast clouds
Reply
#4
Sorry, replied to wrong reply.
Reply
#5
(Sep-13-2021, 12:44 PM)snippsat Wrote: I showed you a working function in your last Thread
Now you mess it up with serval errors one mention bye ibreeden and call json should be json_data.
All the globals values should not just get be used in function if there not are in function parameter.
As mention in last post do small teste as your function now it's not working at all,
then you stop and fix function before adding ConfigParser and GUI.

To show a example with ConfigParser using my code from last Thread.
As api_key is personal to you should not need to type in every time,have in api_key in the .ini file.
key.ini:
[key]
api_key = xxxxxxxxxxxxx
import requests
from configparser import ConfigParser

def get_weather(city, api_key):
    api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
    json_data = requests.get(api).json()
    return json_data

def get_api_key():
    config = ConfigParser()
    config.read('key.ini')
    api_key = config['key']['api_key']
    return api_key

if __name__ == '__main__':
    city = 'Winnsboro,Louisiana'
    weather = get_weather(city, get_api_key())
    print(weather['name'])
    print(weather['main']['temp'])
    print(weather[ 'weather'][0]['description'])
Output:
Winnsboro 295.99 overcast clouds

I can copy/paste your code into my VS code as a new file and use the identical config.ini and get errors. I don't know if I don't have something set up correctly in VS code or what. The only difference is that I want to input the city and state in because I travel and need to change locations. In the error at the bottom it shows Python 37, I only have 3.9. installed.

import requests
from configparser import ConfigParser

city = input("City where you are?: ")

state = input("State where you are? ")

##Weather API json and data
def get_weather(city, api_key):
    api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
    json_data = requests.get(api).json()
    return json_data
 
def get_api_key():
    config = ConfigParser()
    config.read('key.ini')
    api_key = config['key']['api_key']
    return api_key
 
if __name__ == '__main__':
    city = 'Winnsboro, Texas'
    weather = get_weather(city, get_api_key())
    print(weather['name'])
    print(weather['main']['temp'])
    print(weather[ 'weather'][0]['description'])
I get this error now.

City where you are?: Winnsboro
State where you are? Texas
Traceback (most recent call last):
File "c:/Users/xxxxxxxxxxxxx.py", line 22, in <module>
weather = get_weather(city, get_api_key())
File "c:/Users/xxxxxxxxxxxxxx.py", line 17, in get_api_key
api_key = config['key']['api_key']
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\configparser.py", line 958, in __getitem__
raise KeyError(key)
KeyError: 'key'
Reply
#6
(Sep-13-2021, 03:01 PM)trthskr4 Wrote: In the error at the bottom it shows Python 37, I only have 3.9. installed.
Click down in left corner then Python: Select Interpreter will show up an choice Python 3.9
Now it use version the come with Microsoft Visual Studio stand alone,and not the same as Vs Code.
Some setup tips here VS Code from start

You most have key.ini in same folder as you run script,or give path where it is.
Add input last not before the function,so like this.
import requests
from configparser import ConfigParser

def get_weather(city, api_key):
    api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
    json_data = requests.get(api).json()
    return json_data

def get_api_key():
    config = ConfigParser()
    config.read('key.ini')
    api_key = config['key']['api_key']
    return api_key

if __name__ == '__main__':
    city = input("City where you are?: ")
    state = input("State where you are? ")
    city = f'{city},{state}'
    weather = get_weather(city, get_api_key())
    print(weather['name'])
    print(weather['main']['temp'])
    print(weather[ 'weather'][0]['description'])
Test.
# Version
G:\div_code\answer\weather
λ python -V
Python 3.9.5

# Files in folder
G:\div_code\answer\weather
λ ls
key.ini  open_weather.py

# Run
G:\div_code\answer\weather
λ python open_weather.py
City where you are?: Houston
State where you are? Texas
Houston
296.82
mist
Reply
#7
I finally got this to work beautifully. I uninstalled Python 3.9.7 and installed 3.9.6 and set it back up and voila. Thanks for all your help.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to access values returned from inquirer cspower 6 703 Dec-26-2023, 09:34 PM
Last Post: cspower
  Variable is not defined error when trying to use my custom function code fnafgamer239 4 517 Nov-23-2023, 02:53 PM
Last Post: rob101
  [variable] is not defined error arises despite variable being defined TheTypicalDoge 4 2,045 Apr-05-2022, 04:55 AM
Last Post: deanhystad
  Error 'Contour' not Defined DaveG 3 2,283 Mar-13-2022, 03:29 AM
Last Post: deanhystad
  SQLAlchemy Object Missing when Null is returned Personne 1 1,678 Feb-19-2022, 02:50 AM
Last Post: Larz60+
  Libraries installed with pipenv, but ModuleNotFoundError returned jpncsu 2 2,949 Sep-06-2021, 07:24 PM
Last Post: jpncsu
  Error when refering to class defined in 'main' in an imported module HeRo 2 2,335 Apr-13-2021, 07:22 PM
Last Post: HeRo
  Why does lambda throw 'name value_o is not defined' error? karabakh 3 2,123 Dec-14-2020, 05:45 PM
Last Post: karabakh
  name error "name"is not defined MaartenRo 1 3,377 Jul-28-2020, 02:39 AM
Last Post: bowlofred
  Name Error: name 'Stockton' is not defined Pinokchu 3 2,249 Jun-13-2020, 02:48 PM
Last Post: Yoriz

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020