AttributeError:即使发送了电子邮件,__ exit__也会出错

时间:2017-11-01 18:51:42

标签: python

我正在尝试仅在excel文件非空时发送电子邮件(标题之外还有数据),否则不执行任何操作。 这可能是我忽略的愚蠢,但下面的查询引发AttributeError: __exit__错误。我认为with语句应该处理(f.close())。

你介意检查一下是什么问题吗?谢谢! 请注意,无论错误如何,都会实际发送电子邮件,但不会打印else语句中的消息。

with xlrd.open_workbook('name.xlsx').sheet_by_index(0) as f:
    if len(f.readlines()) > 1:  
        insert script to send email # If excel is not empty, send output via Email
    else:
        print('No new data') # dont send email

1 个答案:

答案 0 :(得分:1)

在这种情况下,

f是工作表,而不是工作簿。此外,如果您希望调用close,则必须将其包装在contextlib.closing()中; with仅适用于上下文管理器。

您可以尝试以下方式:

import contextlib
with contextlib.closing(xlrd.open_workbook('name.xlsx')) as workbook:
  f = workbook.sheet_by_index(0)
  if f.nrows > 0:
    pass # has rows
  else:
    pass # has no rows

但我很确定workbook不会保留任何资源。我认为他们甚至没有close方法。