Python:使用 API 从 JSON 中提取数据,发送到 Excel.获取类型错误:NoneType 对象不可下标



pyhton和API的新功能,但我正在尝试使用API从服务器收集大量数据。脚本一直工作到今天,当我遇到 NoneType 的类型错误时。在 for 循环中打印数据以查看它在哪里出现。找到了罪魁祸首,现在我正在尝试弄清楚如何跳过它,或者放置默认值。

对于大多数数据,我从 JSON 文件中获取以下键和值:

项目: 0: 数据: 键:值 键:值 键:值

但是对于 JSON 中的几个特定项目,我得到以下内容:

项目: 0: 数据: 键: []

如何强制我的脚本跳过此特定键,或者至少为其提供默认值,而不是由于 TypeError 而终止程序并停止进程写入 excel?

for entry in search["items"]:
info = entry['data']['info']
info1 = entry['data']["info"]
info2 = entry['data']["info"]
info3 = entry['data']["info"]
info5 = entry['data']["info"]
info6= entry['data']["info"]
info7= entry['data']["info"]
info8= entry['data']["info"]
info9= entry['type']
info10= entry["subscription"]['info']
info11= entry["subscription"]["info"]
info12= entry["uid"]
info13= entry["subscription"]["info"]
info14= entry["info"]
info15= entry['gateway']["info"]
info16= entry['gateway']["info"]
info17= entry['gateway']["info"]
info18= entry['labels']
info19= entry['info']
a = int(last_comm or 0)/1000.0
r = (datetime.datetime.fromtimestamp(a).strftime
('%Y-%m-%d %H:%M:%S'))
last_sync = entry["lastSyncDate"]
b = int(last_sync or 0)/1000.0
t = (datetime.datetime.fromtimestamp(b).strftime
('%Y-%m-%d %H:%M:%S'))
webbrowser.open(av + uid + av_end + company)
count +=1
print(f"Site Name: {siteName}nninfo: {info}tinfo2: {info2} t"
f"info1: {info1}tField: {info3}nn"
f"Field: {info4}t"
f"Field: {info}tField: {signal}n"
f"Field: {fw}nField: {device}nField: {t}n"
f"Field: {SIM}tField: {mdn}nField: {uid}n"
f"Field: {ipAdd}nField: {commStat}n"
f"Field: {serialNumber}n"
f"Field: {macAdd}nField: {r}n"
f"Field: {imei}n")

错误出现如下:

info10= 条目["订阅"]['信息']

类型错误:"NoneType"对象不可下标

您必须添加 try,除了阻止到有问题的特定函数。

https://docs.python.org/3/tutorial/errors.html

因此,如果问题出在此字段上info2 = entry['data']["info"]

然后你必须把它重写为

info1 = entry['data']["info"]
try:
info2 = entry['data']["info"]
except TypeError:
info2 = 0
info3 = entry['data']["info"]
info5 = entry['data']["info"]

但实际上,您需要了解有关数据结构和中继器的更多信息,这样您就不必在代码中重复太多。如果没有实际的数据集,很难说如何改进这一点。

相关内容

最新更新