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

使用extract_msg处理.msg文件时try-except块莫名打印‘hello’求助

extract_msg捕获NotImplementedError时自动打印"hello"的问题解决

问题场景

用extract_msg包批量分析.msg文件时,遇到包含附件的文件会抛出NotImplementedError,已经用try-except块捕获该异常,但每次触发异常时都会自动打印"hello",自己的代码里完全没有写这个打印语句,十分困惑。

有人建议修改glob路径写法:
原代码:

#f-variabele 
f = glob.glob(r'D:\AA Brenda\Python\DVS_lang\*\*.msg', recursive=True) 

修改为:

f = glob.glob(r'D:/AA Brenda/Python/DVS_lang/**/*.msg', recursive=True)

我的核心循环代码如下:

#loop over folders
paths =[]
senders = []
recipients = []
dates = []
subjects = []
body = []

#append data to lists:
for filename in f:
    try:
        msg = extract_msg.Message(filename)
        paths.append(filename)
        senders.append(msg.sender)
        recipients.append(msg.to)
        dates.append(msg.date)
        subjects.append(msg.subject)
        body.append(msg.body)
    except NotImplementedError:   #"NotImplementedError: Current version of ExtractMsg.py does not 
                                  #support extraction of containers that are not embeded msg files."
        print("")

原因分析

这个自动打印的"hello"大概率是extract_msg包内部的调试遗留代码,不是你的代码问题。有些开发者在开发库时会添加临时调试打印,可能忘记移除,当触发相关异常时就会输出这个内容。

另外,关于路径修改的建议:这个改动是为了让glob能递归遍历所有子目录(**配合recursive=True才会深度递归,原代码的*只遍历下一级目录),但它和自动打印"hello"的问题无关,只是解决文件查找范围的问题。

解决方案

1. 升级extract_msg到最新版本

优先尝试升级包,官方通常会在后续版本中移除调试代码:

pip install --upgrade extract_msg

2. 临时抑制包内部的输出

如果暂时无法升级,可以在创建extract_msg.Message对象时重定向标准输出,避免包内部的打印内容干扰:

import sys
from contextlib import redirect_stdout

#loop over folders
paths =[]
senders = []
recipients = []
dates = []
subjects = []
body = []

#append data to lists:
for filename in f:
    try:
        # 临时将stdout重定向到stderr,避免包内调试打印干扰
        with redirect_stdout(sys.stderr):
            msg = extract_msg.Message(filename)
        paths.append(filename)
        senders.append(msg.sender)
        recipients.append(msg.to)
        dates.append(msg.date)
        subjects.append(msg.subject)
        body.append(msg.body)
    except NotImplementedError:
        # 可改为记录日志或直接跳过
        pass

3. 替换为支持附件的库

如果需要处理带附件的.msg文件,extract_msg当前版本不支持的话,可以考虑用其他库:

  • pywin32(仅Windows环境):直接调用Outlook的COM接口处理.msg文件,对附件支持更完善
  • msg-parser:另一个处理.msg文件的Python库,可尝试是否适配你的附件场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:18:09