AttributeError: 'AttributeError' 对象没有属性 'To'

时间:2021-01-14 13:41:21

标签: python

我正在尝试使用 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'

有人可以帮忙吗?提前致谢

1 个答案:

答案 0 :(得分:2)

问题是您在 get_msg 函数中返回了一个异常,大致如下所示:

def get_msg(item_number):
  try:
    ...do some stuff...
  except Exception as e:
    return e

看起来您在代码中的某处触发了 AttributeError 异常,并且您返回的是该异常,而不是 Email 对象。

您几乎不希望有一个 except 语句来抑制所有类似的异常,因为它会隐藏您的代码中的错误(正如我们在这里看到的)。捕获特定异常通常是更好的做法,或者如果您的代码尽管出现异常仍会继续,则至少记录错误。

作为第一步,我建议删除整个 try/except 块并让您的代码在没有它的情况下工作。