我正在尝试仅在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
答案 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
方法。