我想我可能会忽略一些简单的东西。我有一个定义了构造函数的类。在其中一个函数中,我打电话给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
我总是无。我知道我得到的数据,因为当我用打印替换返回时,我得到了预期的响应。我想也许我需要在构造函数中定义数据,但是然后我的类的每个函数都需要定义自己的变量。我认为它会变得混乱。
任何建议,请让我知道。谢谢!
也许你错误地访问结果的特定部分 - 添加什么的'print'显示的信息,当你把它取代'回归'。 – BartoszKP
如果状态不是“OK”,该怎么办?你的函数返回的值在所有这些情况下都是无的 – praveen