sorry, it’s a bit more difficult. this works: https://gist.github.com/flying-sheep/86dfcc1bdd71a33fa3483b83e254084c
Philipp A. <flying-sh...@web.de> schrieb am Do., 7. Sep. 2017 um 21:18 Uhr: > Sadly it’s hard to create a context manager that skips its body like this: > > with unpack(computation()) as result: > do_something_with_result(result) > > You can do it with some hackery like described here: > https://stackoverflow.com/a/12594789/247482 > > class unpack: > def __init__(self, pred): > self.pred = pred > > def __enter__(self): > if self.pred: > return self.pred > # else skip the with block’s body > sys.settrace(lambda *args, **kw: None) > frame = inspect.currentframe(1) > frame.f_trace = self.trace > > def trace(self, frame, event, arg): > raise > > def __exit__(self, type, value, traceback): > return True # suppress the exception > > Steven D'Aprano <st...@pearwood.info> schrieb am Do., 7. Sep. 2017 um > 18:26 Uhr: > >> On Thu, Sep 07, 2017 at 04:36:40PM +0200, Jason H wrote: >> >> > I also often wonder why we are left doing an assignment and test. You >> have two options: >> > 1. assign to a variable then test and use >> > 2. repeat the function call >> >> Personally, I don't see what's wrong with the "assign then test" idiom. >> >> x = something() >> if x: >> do_stuff() >> >> >> > I would offer that 'with' [sh|c]ould be used: >> > with test() as x: >> > handle_truthy(x) >> > else: >> > handle_falsey() # do we provide x here too? Because None vs False? >> >> >> This would cause confusing errors and mysterious behaviour, depending on >> whether the test() object was a context manager or not. Which should >> take priority? If you see: >> >> with spam() as x: >> do_stuff >> >> is that a context manager with block (like "with open(...) as f") or >> your boolean if test in disguise? >> >> Having "with" sometimes be a disguised "if" and sometimes a regular >> "with" will make it really, really hard to reason about code. >> >> >> -- >> Steve >> _______________________________________________ >> Python-ideas mailing list >> Python-ideas@python.org >> https://mail.python.org/mailman/listinfo/python-ideas >> Code of Conduct: http://python.org/psf/codeofconduct/ >> >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/