我正在尝试使用 python Jupyter notebook 探索 enron 电子邮件数据集。但我收到此属性错误。我正在尝试阅读电子邮件并将它们转换为 csv 格式,以便我可以进一步应用 Ml 进行情感分析。 导入 tarfile 进口重新 从日期时间导入日期时间 从集合导入namedtuple,计数器 将熊猫导入为 pd 将 altair 导入为 alt
tar =tarfile.open(r"C:\Users\nikip\Documents\2021\Interview Preparation\sentiment analysis\enron_mail_20150507.tar.gz", "r")
items = tar.getmembers()
Email = namedtuple('Email', 'Date, From, To, Subject, Cc, Bcc, Message')
def get_msg(item_number):
f = tar.extractfile(items[item_number])
try:
date = from_ = to = subject = cc= bcc = message= ''
in_to = False
in_message = False
to = []
message = []
item = f.read().decode()
item = item.replace('\r', '').replace('\t', '')
lines = item.split('\n')
for num, line in enumerate(lines):
if line.startswith('Date:') and not date:
date = datetime.strptime(' '.join(line.split('Date: ')[1].split()[:-2]), '%a, %d %b %Y %H:%M:%S')
elif line.startswith('From:') and not from_:
from_ = line.replace('From:', '').strip()
elif line.startswith('To:')and not to:
in_to = True
to = line.replace('To:', '').replace(',', '').replace(',', '').split()
elif line.startswith('Subject:') and not subject:
in_to = False
subject = line.replace('Subject:', '').strip()
elif line.startswith('Cc:') and not cc:
cc = line.replace('Cc:', '').replace(',', '').replace(',', '').split()
elif line.startswith('Bcc:') and not bcc:
bcc = line.replace('Bcc:', '').replace(',', '').replace(',', '').split()
elif in_to:
to.extend(line.replace(',', '').split())
elif line.statswith('Subject:') and not subject:
in_to =False
elif line.startswith('X-FileName'):
in_message = True
elif in_message:
message.append(line)
to = '; '.join(to).strip()
cc = '; '.join(cc).strip()
bcc = '; '.join(bcc).strip()
message = ' '.join(message).strip()
email = Email(date, from_, to, subject, cc, bcc, message)
return email
except Exception as e:
return e
msg = get_msg(3002)
msg.date
我收到如下错误消息:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-11-e1439579a8e7> in <module>
----> 1 msg.To
AttributeError: 'AttributeError' object has no attribute 'To'
有人可以帮忙吗?提前致谢
答案 0 :(得分:2)
问题是您在 get_msg
函数中返回了一个异常,大致如下所示:
def get_msg(item_number):
try:
...do some stuff...
except Exception as e:
return e
看起来您在代码中的某处触发了 AttributeError
异常,并且您返回的是该异常,而不是 Email
对象。
您几乎不希望有一个 except
语句来抑制所有类似的异常,因为它会隐藏您的代码中的错误(正如我们在这里看到的)。捕获特定异常通常是更好的做法,或者如果您的代码尽管出现异常仍会继续,则至少记录错误。
作为第一步,我建议删除整个 try/except
块并让您的代码在没有它的情况下工作。