我有这个脚本从我的松散帐户中删除文件:
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行,in files = json.loads(content)[“files”] KeyError:'files'
我错过了什么吗? TKS!
答案 0 :(得分:1)
切换
if len(response.json()["files"]) == 0:
要
if len(response.json().get("files", [])) == 0:
默认情况下,如果属性不存在,则get方法返回None
,而如果项目不存在,则[]符号会引发错误。如果response.json()没有文件属性(这就是这里发生的事情),那么它就会爆发。
答案 1 :(得分:0)
您期望json.loads()
将返回一个名为files
的密钥的字典。但实际上,解析后的数据没有该密钥。
你可以改为:
payload = json.loads(content)
files = payload.get('files')
这种方式files
将包含JSON有效内容中的实际文件。如果文件密钥不存在,则返回None
。
您还可以将值传递给get
方法,以便在找不到密钥时设置默认值,如下所示:
files = payload.get('files', [])
这样,如果文件密钥不存在,文件将是一个空列表。