IMAP4.close closes the selected inbox and commits changes such as deletions. It 
is not called on IMAP4.__exit__ (only logout is, which doesn't call close in 
its call stack) however, so:

with imaplib.IMAP4_SSL(...) as i:
    ...

would fail to commit those changes. close must be explicitly invoked i.e.

with imaplib.IMAP4_SSL(...) as i:
    ...
    i.close()

This is counterintuitive however, as the with statement is meant to 
automatically clean up. Another programmer might come along and delete 
i.close() because it seems unnecessary. Now changes aren't being committed and 
the programmer doesn't realize it's because of this weird Python idiosyncracy.

Python IO such as open commits changes automatically, so I'm not sure why IMAP4 
doesn't and only logs out. 
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to