From: Aahz [mailto:aahz@pythoncraft.com] > It's not at all contrived. And I think it's perfectly acceptable; > it's no different, fundamentally, from calling f.close() twice by > mistake. I blew the example, as I forgot that multiple close() calls were OK. And maybe Alex's point that cleanup should be callable multiple times kills the whole argument. But I'm not entirely sure I follow your comment. Are you saying that you think that using the same object in 2 with statements (where, by definition, in the second the object will be "already cleaned up") is acceptable, or that you think it's a mistake (in which case, are you saying that we shouldn't care *because* the coder made a mistake?) Actually, I think I'm guilty of muddy thinking here, in any case. I can imagine a single "manager" object, which could be entirely valid in multiple with statements: # Reusing the tired old file closing example, sorry, I'm # too befuddled to think up a new example right now... class manager: def __init__(self, f =3D None): self.f =3D f def control(self, f): self.f =3D f def __exit__(self): if self.f: self.f.close() self.f =3D None f =3D open("whatever.txt") M =3D manager(f) with M: # use M.f, could expose this better... M.control(open("another.txt")) with M: ... I really can't decide if this is reasonable use, or horrible abuse. Or somewhere in between. I'm pretty sure I wouldn't like to have to = maintain code like this at short notice, though... Time to stop responding to messages and have a good think about all of this. Paul.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4