我目前正在用Python语言编写一个不一致的机器人,并且正在构建一个ip info
命令。但是,当我尝试运行它时,它显示以下错误:
'dict' object has no attribute 'status'
这是我当前的python代码:
import discord
import datetime
import pymysql
import time
from datetime import timedelta, timezone
import asyncio
import re
import os
import requests
import json
if message.content.startswith('!ipinfo'):
input = message.content.replace('!ipinfo', '').strip()
try:
req = requests.get('http://ip-api.com/json/{}'.format(input))
resp = json.loads(req.content.decode())
if resp.status.code == 200:
if resp['status'] == 'success':
# valid ip
await channel.send(content='IP Logging Here.')
elif resp['status'] == 'fail':
await channel.send(content='API Request Failed.')
else :
await channel.send(content='HTTP Request Failed: Error {}'.format(req.status_code))
except Exception as e:
print(e)
这是我应该从API获取的数据:(测试IP)
{
"as":"AS15169 Google LLC",
"city":"Mountain View",
"country":"United States",
"countryCode":"US",
"isp":"Google",
"lat":37.4192,
"lon":-122.0574,
"org":"Google",
"query":"74.125.224.72",
"region":"CA",
"regionName":"California",
"status":"success",
"timezone":"America/Los_Angeles",
"zip":"94043"
}
有人知道如何修复这个错误吗?
发布于 2018-06-28 03:25:24
问题在于您对resp.status.code
的使用。
在使用Python request模块时,您应该使用resp.status_code
。它获得一个字典作为响应,并查找status
而不是status_code
。
在对我的回答做出响应之后,现在检查您的代码,您似乎正在寻找json.loads
上的status_code
。
请尝试使用:req.status_code
,这样您就可以在实际请求中查找status_code
。
https://stackoverflow.com/questions/51070029
复制相似问题