这个代码报错argument of type 'NoneType' is not iterable,应该怎么改?#成功 import csv import os import json from IPython import display pic_folder_path = "./期末作业-面部数据/face_images/a7" output_list = [] no_result_list = [] for filename in os.listdir(pic_folder_path): if filename.endswith(".jpg"): pic_path = os.path.join(pic_folder_path, filename) result = None while not result or "result" not in result or "face_list" not in json.loads(result)["result"]: result = main(pic_path) # 调用主函数获取结果 result_dict = json.loads(result)["result"]["face_list"] if not result_dict: no_result_list.append(filename) for item in result_dict: output_list.append({ "filename": filename, "type": item["emotion"] }) # 输出未能识别结果的图片名称 print("无法识别结果的图片:", no_result_list) # 将结果保存为csv文件 with open("output.csv", "a", newline="") as f: writer = csv.DictWriter(f, fieldnames=["filename", "type"]) # writer.writeheader() writer.writerows(output_list)
时间: 2024-03-11 07:51:21 浏览: 149
(存入json文件出错)TypeError: Object of type int64 is not JSON serializable
5星 · 资源好评率100%
这个错误通常是由于函数 `main()` 返回了 `None` 值,导致在 `json.loads(result)["result"]` 和 `json.loads(result)["result"]["face_list"]` 中的某个地方出现了 `NoneType` 类型,从而无法进行迭代操作。为了解决这个问题,你可以在 `main()` 函数中确保返回一个有效的结果,或者在调用 `json.loads()` 前先检查 `result` 是否为 `None`。下面是修改后的代码:
```python
import csv
import os
import json
from IPython import display
pic_folder_path = "./期末作业-面部数据/face_images/a7"
output_list = []
no_result_list = []
def main(pic_path):
# 主函数的具体实现
pass
for filename in os.listdir(pic_folder_path):
if filename.endswith(".jpg"):
pic_path = os.path.join(pic_folder_path, filename)
result = None
while not result or "result" not in result or "face_list" not in json.loads(result)["result"]:
result = main(pic_path) # 调用主函数获取结果
if result is None:
break # 如果获取的结果为None,直接跳出循环
if result is not None:
result_dict = json.loads(result)["result"]["face_list"]
if not result_dict:
no_result_list.append(filename)
for item in result_dict:
output_list.append({
"filename": filename,
"type": item["emotion"]
})
# 输出未能识别结果的图片名称
print("无法识别结果的图片:", no_result_list)
# 将结果保存为csv文件
with open("output.csv", "a", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["filename", "type"])
# writer.writeheader()
writer.writerows(output_list)
```
这样,如果 `main()` 函数返回 `None` 值,程序会直接跳出循环,从而避免了 `json.loads()` 报错的问题。
阅读全文