You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典列表取值匹配异常:条件判断未触发求助

问题分析与解决

问题描述

有一个字典列表,需求是遍历所有元素的message值:当该值包含"App init"时执行sys.exit(0),包含"Error"时执行sys.exit(1)。但实际运行时,log[index]['message'] in 'App init'条件未触发,无法输出预期的打印内容。

核心错误点

  1. in运算符逻辑颠倒:
    原代码中log[index]['message'] in 'App init'的含义是「判断整个message字符串是否是"App init"的子串」,但实际需求是「判断"App init"是否存在于message字符串中」,正确写法应该是'App init' in log[index]['message']。
  2. 未导入sys模块:
    代码中使用了sys.exit()但没有提前导入sys模块,运行时会抛出NameError。
  3. 大小写与逻辑双重错误:
    第二个条件log[index]['message'] in 'ERROR'同样逻辑颠倒,且需求是匹配"Error"(注意大小写),正确写法应为'Error' in log[index]['message'](若需忽略大小写可转为小写判断)。
  4. 循环写法冗余:
    使用for index in range(len(log))遍历列表不够简洁,直接遍历列表中的字典元素更符合Python风格。

修正后的代码

import sys

log = [
    {'timestamp': 1666791137689, 'level': 'ALL', 'message': '10-26 14:54:33.389  7768  7793 D EGL_emulation: app_time_stats: avg=16.67ms min=15.85ms max=17.49ms count=60'}, 
    {'timestamp': 1666791137689, 'level': 'ALL', 'message': '10-26 14:54:34.390  7768  7793 D EGL_emulation: app_time_stats: avg=15.44ms min=14.40ms max=16.90ms count=60'}, 
    {'timestamp': 1666791137689, 'level': 'ALL', 'message': '10-26 14:54:35.406  7768  7793 D EGL_emulation: app_time_stats: avg=15.54ms min=11.85ms max=17.15ms count=61'}, 
    {'timestamp': 1666791137689, 'level': 'ALL', 'message': '10-26 14:54:35.654   218  7685 I keystore2: keystore2::watchdog: Watchdog thread idle -> terminating. Have a great day.'},     
    {'timestamp': 1666791137689, 'level': 'ALL', 'message': '10-29 05:04:01.873 Default [Info ] App init'}
]

message_list = []
for item in log:
    msg = item['message']
    message_list.append(msg)
    print(msg)

    if 'App init' in msg:
        print(f"haha The application is running: {msg}")
        sys.exit(0)
    elif 'Error' in msg:
        print(f"haha The application is having ERROR: {msg}")
        sys.exit(1)

with open('message_log.txt', 'w') as f:
    f.write(str(message_list))

额外优化建议

  • 使用f-string拼接字符串比+更直观易读;
  • 如果需要忽略大小写匹配,可将判断条件改为'app init' in msg.lower()和'error' in msg.lower();
  • 若message内容可能不存在,建议添加item.get('message', '')避免KeyError。

内容的提问来源于stack exchange,提问作者bbq123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:20:17