In Soni's original code snippet, there is a clear separation of code that is inside the try block from code that is outside the try block:
> def a_potentially_recursive_function(some, args): > try: > some.user_code() > except ExceptionWeCareAbout as exc: > raise RuntimeError from exc > code_we_assume_is_safe() # and more code following... This is good exception hygiene. Only some.user_code is guarded by the try block. If it turns out that code_we_assume_is_safe is not actually safe, and fails with an exception, it won't be caught by the try block and you will know about it. In your re-written syntactic sugar, you have: # new syntax > def a_potentially_recursive_function(some, args) with ExceptionWeCareAbout: > some.user_code() > code_we_assume_is_safe() # and more code following... which becomes: > def a_potentially_recursive_function(some, args): > try: > some.user_code() > code_we_assume_is_safe() # and more code following... > except ExceptionWeCareAbout as exc: which is the opposite of good exception hygiene. Too much code, including the wrong code, is guarded by the try block, which means that the compiler has to *guess your meaning* and set a flag to decide whether to re-raise the exception or run the except block. Its not clear how the compiler guesses that. Is it only because you have an explicit `raise ExceptionWeCareAbout` in the code? What if the exception is not explicit? # explicitly raising ExceptionWeCareAbout raise ExceptionWeCareAbout # not explicit raise some_exception_object_we_prepared_earlier raise prepare_exception(*args) # returns an ExceptionWeCareAbout instance verify_or_raise(condition) # raises ExceptionWeCareAbout > Obviously this doesn't solve exception handling, doesn't require the > caller to catch the exceptions, etc etc. So that's two points against it. > It does, however, encourage better exception hygiene. Except it doesn't, it makes it worse. So that's three points against it. > Chances are something like this would > significantly reduce the amount of swallowed exceptions, if it gets > widely adopted. Or based on your examples, increase the number of swallowed exceptions, and be much harder to refactor code safely. -- Steve _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/BC2UZH3Y2UCZNE5CJPEH3ZWBNX6TTRTY/ Code of Conduct: http://python.org/psf/codeofconduct/