Python类操作cookie触发UnboundLocalError该如何解决
问题原因
- 当
response.cookies为空时,for循环不会执行,names、values、domains三个变量从未被定义,后续调用直接触发UnboundLocalError报错。 - 即便
response.cookies非空,当前循环逻辑会反复覆盖三个变量的值,最终只能拿到最后一个cookie的属性,前面的所有cookie数据都会被丢弃,不符合常规的cookie收集需求。
修复方案
场景1:仅需要使用第一个返回的cookie
提前给变量赋默认值,避免未定义问题:
response = self.__send_http_request(req_prepared) status_code = response.status_code if 200 <= status_code <= 299: # 先初始化默认值,避免空cookie场景报错 names = values = domains = None if response.cookies: first_cookie = next(iter(response.cookies)) names = first_cookie.name values = first_cookie.value domains = first_cookie.domain return self.get_starships_response( status_code = response.status_code, request = req, name = names, value = values, domain = domains ) else: ...
场景2:需要收集所有返回的cookie
调整存储结构,用列表存储全量cookie信息,同步修改get_starships_response的入参适配即可:
response = self.__send_http_request(req_prepared) status_code = response.status_code if 200 <= status_code <= 299: cookie_list = [] for cookie in response.cookies: cookie_list.append({ "name": cookie.name, "value": cookie.value, "domain": cookie.domain }) return self.get_starships_response( status_code = response.status_code, request = req, cookies = cookie_list ) else: ...
如果确定业务逻辑就是要取最后一个cookie,也可以按照场景1的逻辑,先判断response.cookies非空再取最后一个元素赋值,避免空迭代的报错问题。
内容的提问来源于stack exchange,提问作者João Galdino
相关产品推荐
相关产品推荐

