Я думаю, что я могу пропустить что-то простое. У меня есть класс с определенным конструктором. В одной из функций я делаю вызов api для хранения ответа в переменной. Я хотел бы вернуть эту переменную. вроде как, info = MyClass(), data = info.somefunctuon(). В моем случае данные всегда возвращают None.Функция класса Python, не возвращающая переменную
вот фрагмент того, что у меня есть.
class SomeAPI(object):
def __init__(self, br, cj, username, password, logged_in='', api_id='', data=''):
self.br = br
self.cj = cj
self.logged_in = False
self.username = username
self.password = password
self.api_id = api_id
br.set_cookiejar(self.cj)
br.set_handle_robots(False)
def _login_check(f):
@wraps(f)
def wrapper(self):
if self.log_in():
f(self)
else:
raise MyError('Not Logged In')
return wrapper
def log_in(self):
auth_data = {'cmd': 'auth', 'params': {'username': self.username,
'password': self.password}}
if not self.logged_in:
self.br.open('https://someurl.com/auth', dumps(auth_data))
data = loads(self.br.response().read())
status = data['response']['status']
if status == 'OK':
api_id = data['response']['api_id']
self.logged_in = True
self.api_id = api_id
else:
raise MyError(status)
return self.logged_in
@_login_check
def campaigns_list(self):
campaigns_list_data = {'cmd': 'ab_campaigns'}
raw = self.br.open('https://someurl.com/{}'.format(self.api_id),
dumps(campaigns_list_data))
json_resp = raw.read()
resp = loads(json_resp)
status = resp['response']['status']
if status == 'OK':
data = resp['response']['Ad Campaigns']
return data
, когда я делаю:
info = SomeAPI(mechanize.Browser(), cookielib.LWPCookieJar(), 'MyName', '12345')
data = info.campaigns_list()
print data
Я всегда получаю None. Я знаю, что получаю данные, потому что, когда я заменяю return print, я получаю ожидаемый ответ. Я подумал, может быть, мне нужно будет определить данные о конструкторе, но тогда каждой функции моего класса будет нужна его собственная переменная. Я думаю, что это будет беспорядочно.
Любые предложения, пожалуйста, дайте мне знать. Спасибо!
Возможно получить доступ к конкретной части результата неправильно - добавьте информацию о то, что 'print' показывает, когда вы кладете его вместо' возврата '. – BartoszKP
Что делать, если статус не «ОК»? значение, возвращаемое вашей функцией, будет None во всех этих случаях – praveen