Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python脚本上的KeyError_Python_Json_Api - Fatal编程技术网

python脚本上的KeyError

python脚本上的KeyError,python,json,api,Python,Json,Api,我使用此脚本从我的slack帐户中删除文件: import requests import json import calendar import re from datetime import datetime, timedelta _token = re.escape("token") _domain = re.escape("domain") if __name__ == '__main__': while 1: files_list_url = 'https:

我使用此脚本从我的slack帐户中删除文件:

import requests
import json
import calendar
import re
from datetime import datetime, timedelta

_token = re.escape("token")
_domain = re.escape("domain")

if __name__ == '__main__':
    while 1:
        files_list_url = 'https://slack.com/api/files.list'
        date = str(calendar.timegm((datetime.now() + timedelta(-30))
            .utctimetuple()))
        data = {"token": _token, "ts_to": date}
        response = requests.post(files_list_url, data = data)

        if len(response.json()["files"]) == 0:
            break
        for f in response.json()["files"]:
            print "Deleting file " + f["name"] + "..."
            timestamp = str(calendar.timegm(datetime.now().utctimetuple()))
            delete_url = "https://" + _domain + ".slack.com/api/files.delete?t=" + timestamp
            requests.post(delete_url, data = {
                "token": _token, 
                "file": f["id"], 
                "set_active": "true", 
                "_attempts": "1"})
    print "DONE!"
我收到这个错误:

文件“main.py”,第28行,在 files=json.loads(content)[“files”]键错误:“files”

我错过什么了吗? Tks

开关

if len(response.json()["files"]) == 0:

默认情况下,如果属性不存在,get方法返回
None
,而如果项不存在,[]符号则抛出错误。如果response.json()没有files属性(这里就是这样),那么它将中断。

开关

if len(response.json()["files"]) == 0:


默认情况下,如果属性不存在,get方法返回
None
,而如果项不存在,[]符号则抛出错误。如果response.json()没有files属性(这就是这里发生的情况),那么它将中断。

您希望
json.loads()
将返回一个dict,该dict将有一个名为
files
的键。但实际上,解析后的数据没有该键

您可以改为执行以下操作:

payload = json.loads(content)
files = payload.get('files')
通过这种方式,
文件
将包含JSON负载中的实际文件。如果文件键不存在,它将返回
None

如果找不到键,还可以将值传递给
get
方法以设置默认值,如下所示:

files = payload.get('files', [])

这样,如果文件键不存在,文件将成为空列表

您希望
json.loads()
将返回一个dict,其中包含一个名为
files
的键。但实际上,解析后的数据没有该键

您可以改为执行以下操作:

payload = json.loads(content)
files = payload.get('files')
通过这种方式,
文件
将包含JSON负载中的实际文件。如果文件键不存在,它将返回
None

如果找不到键,还可以将值传递给
get
方法以设置默认值,如下所示:

files = payload.get('files', [])

这样,如果文件键不存在,文件将成为空列表

如果“files”键不存在,
get
方法将返回
None
。在
None
上运行
len()好极了,谢谢!切换get以返回空列表而不是标题“files”键不存在,则
get
方法将返回
None
。在
None
上运行
len()好极了,谢谢!切换get以返回空列表