我正在使用python来解码api响应,这是一种json格式。在1100次数据检查后发生此错误
<Response [200]>
{'error': 'internal error'}
Traceback (most recent call last):
File "E:/freelancer_projects/ahref/app2.py", line 63, in <module>
get_rating()
File "E:/freelancer_projects/ahref/app2.py", line 46, in get_rating
result.append((u,data["domain"]["domain_rating"]))
KeyError: 'domain'
正如你所看到的,来自api的响应是可以的,但错误只是说它的内部。为什么这个错误以及它的修复是什么?我正在使用请求库从api
获取数据完整代码:
def get_rating():
fr = input("Enter filename of urls:")
token = input("Enter token:")
f = open(fr, "r",encoding="utf8")
urls = f.readlines()
result=[]
count=1
for u in urls:
u = u.replace("http://", "")
u = u.replace("https://", "")
if "www" not in u:
u="www"+u
ind = u.find("www")
u = u[ind:]
u=u.replace('\n', '')
u=u[:-1]
# print(u)
data=getPageData(u,token)
if data != "":
print(data)
# print(data)
# print(data["domain"]["domain_rating"])
result.append((u,data["domain"]["domain_rating"]))
print(count)
count+=1
# print(result)
result=sorted(result,key=lambda x:x[1],reverse=True)
# print(result)
saveData(result)
def saveData(result):
wb = openpyxl.Workbook()
sheet =wb.get_sheet_by_name('Sheet')
sheet.cell(row=1, column=1).value = "URL"
sheet.cell(row=1, column=2).value = "DOMAIN RATING"
for index,r in enumerate(result):
sheet.cell(row=index+2, column=1).value = r[0]
sheet.cell(row=index+2, column=2).value = r[1]
wb.save("output.xlsx")
get_rating()
答案 0 :(得分:0)
在你的代码的这一行:
result.append((u,data["domain"]["domain_rating"]))
您正在尝试访问data
字典中不存在的密钥,从而导致您的错误:
KeyError: 'domain'
在访问之前,您最好检查字典中是否存在密钥,如下所示:
if "domain" in data:
print('found domain')
在旁注中,使用此代码
if data != ""
检查你的字典并不是一个好主意,它总是True
,请参阅Python解释器中的这个例子:
>>> mydict = dict(foo='foo', bar='bar')
>>> mydict
{'foo': 'foo', 'bar': 'bar'}
>>> mydict != ""
True
>>> mydict2 = dict()
>>> mydict2
{}
>>> mydict2 != ""
True
>>> mydict2 = None
>>> mydict2 != ""
True
正如您所看到的,使用空dict,即使我们将mydict2
设置为None
,我们也会满足条件,但下面的代码会失败。