最近在编写 Python 程序的时候,服务运行一段时间之后报如下错误:
TypeError: 'bool' object is not subscriptable
出现问题的原因:
bool 值不能有下标,出现错误的代码如下:
import requests
from requests import HTTPError, ConnectionError, Timeout
from json import decoder, JSONDecodeError
def a(self, url):
try:
result = requests.get(url, timeout=100)
except (ConnectionError, HTTPError, Timeout) as e:
return False
if result:
# result值可能为None
try:
json_result = result.json()
except decoder.JSONDecodeError:
return False
if json_result['status'] == 'ok':
json_result_data = json_result['data']
return json_result_data
def b(self):
get_result = self.a('https://www.pdflibr.com')
# 此处会出现错误,没有对获取的值进行判断,首先需要判断
get_a1 = get_result['a1']
上面注释已经很清楚的说明了错误产生的原因。
解决方案:
对调用的结果首先需要判断,是不是 False,修改后的代码如下:
import requests
from requests import HTTPError, ConnectionError, Timeout
from json import decoder, JSONDecodeError
def a(self, url):
try:
result = requests.get(url, timeout=100)
except (ConnectionError, HTTPError, Timeout) as e:
return False
if result:
# result值可能为None
try:
json_result = result.json()
except decoder.JSONDecodeError:
return False
if json_result['status'] == 'ok':
json_result_data = json_result['data']
return json_result_data
def b(self):
get_result = self.a('https://www.pdflibr.com')
# 此处会出现错误,没有对获取的值进行判断,首先需要判断
if get_result:
get_a1 = get_result['a1']
else:
pass
首先我们需要对调用的函数进行判断,之后才能获取下标,否则就会报如上错误。