AttributeError: у объекта 'function' нет атрибута 'response' - PullRequest
0 голосов
/ 31 мая 2018

У меня есть модуль обработки ошибок, который я использую в своем основном скрипте для отправки запросов к API.Я хочу вернуть «ответ» и «данные» для использования в основном скрипте.Работает до тех пор, пока не попытается напечатать «ответ».Извиняюсь за несоответствия, я, очевидно, все еще учусь.И я не буду учиться, не сделав сначала несколько ошибок.Я ценю конструктивную критику.

my_module

import requests
import json

def errorHandler(url):
    try:
        response = requests.get(url, timeout=5)
        status = response.status_code
        data = response.json()
    except requests.exceptions.Timeout:
        print "Timeout error.\n"
    except requests.exceptions.ConnectionError:
        print "Connection error.\n"
    except ValueError:
        print "ValueError: No JSON object could be decoded.\n"
    else:
        if response.status_code == 200:
            print "Status: 200 OK \n"
        elif response.status_code == 400:
            print "Status: " + str(status) + " error. Bad request."
            print "Correlation ID: " + str(data['correlationId']) + "\n"
        else:
            print "Status: " + str(status) + " error.\n"

    return response
    return data

my_script

errorHandler("https://api.weather.gov/alerts/active")

print "Content type is " + response.headers['content-type'] +".\n" #expect geo+json

# I need the data from the module to do this, but not for each get request
nwsId = data['features'][0]['properties']['id']

ошибка

Traceback (most recent call last):
  File "my_script.py", line 20, in <module>
    print errorHandler.response
AttributeError: 'function' object has no attribute 'response'

1 Ответ

0 голосов
/ 31 мая 2018

Если вы хотите вернуть несколько значений, вы возвращаете их как кортеж в одном выражении:

return response, data

Затем в вызывающей программе вы присваиваете их переменным с присваиванием кортежа:

response, data = errorHandler("https://api.weather.gov/alerts/active")
print "Content type is " + response.headers['content-type'] +".\n"
nwsId = data['features'][0]['properties']['id']

Однако ваша функция не будет работать правильно, если произойдет какое-либо исключение.Если есть исключение, он не будет устанавливать переменные response или data, поэтому, когда он попытается вернуть их, он получит ошибку.

...