On 05/21/2013 02:57 PM, Serhiy Storchaka wrote:
21.05.13 13:05, Hrvoje Niksic написав(ла):
On 05/21/2013 11:56 AM, Serhiy Storchaka wrote:
try:
      x = d['key']
except KeyError:
      x = fallback('key')

def fallback(key):
      if key not in a:
          raise BusinessError(...)
      return 1 / a[key] # possible TypeError, ZeroDivisionError, etc

Yes, in that case the exception will appear unintentional and you get
the old message — it's on a best-effort basis.

In both cases the BusinessError exception raised explicitly. How do you
distinguish one case from another?

In my example code the "raise" keyword appears lexically inside the "except" clause. The compiler would automatically emit a different raise opcode in that case.

NB in your example the "raise" is just as intentional, but invoked from a different function, which causes the above criterion to result in a false negative. Even in so, the behavior would be no worse than now, you'd just get the old message.

Hrvoje

_______________________________________________
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

Reply via email to