On Wed, Feb 1, 2012 at 12:55 PM, Ethan Furman <et...@stoneleaf.us> wrote: > Guido van Rossum wrote: >> >> On Wed, Feb 1, 2012 at 10:48 AM, Ethan Furman <et...@stoneleaf.us> wrote: >>> >>> My apologies for my ignorance, but is the code smell because both False >>> and >>> None evaluate to bool(False)? >> >> >> That's part of it, but the other part is that the type of __context__ >> is now truly dynamic. I often *think* of variables as having some >> static type, e.g. "integer" or "Foo instance", and for most Foo >> instances I consider None an acceptable value (since that's how >> pointer types work in most static languages). But the type of >> __context__ you're proposing is now a union of exception and bool, >> except that the bool can only be False. >> >> It seems you really need a marker object. I'd be fine with using some >> other opaque marker -- IMO that's much better than using False but >> disallowing True. > > > So for __cause__ we need three values: > > 1) Not set special value (prints __context__ if present) > > 2) Some exception (print instead of __context__) > > 3) Ignore __context__ special value (and stop following the > __context__ chain) > > For (3) we're hoping for None, for (2) we have an actual exception, and for > (1) -- hmmm. > > It seems like a stretch, but we could do (looking at both __context__ and > __cause__): > > __context__ __cause__ > > raise None False [1] > > reraise previous True [2] > > reraise from previous None [3] | exception > > [1] False means non-chained exception > [2] True means chained exception > [3] None means chained exception, but by default we do not print > nor follow the chain > > The downside to this is that effectively either False and True mean the same > thing, i.e. try to follow the __context__ chain, or False and None mean the > same thing, i.e. don't bother trying to follow the __context__ chain because > it either doesn't exist or is being suppressed. > > Feels like a bunch of complexity for marginal value. As you were saying, > some other object to replace both False and True in the above table would be > ideal.
So what did you think of Terry Reedy's idea of using a special exception class? -- --Guido van Rossum (python.org/~guido) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com