[Python-ideas] "while ... try" - block or "for ... try" - block
Matt Joiner
anacrolix at gmail.com
Wed Jan 11 16:11:18 CET 2012
I don't like it, you're merging 2 statements at the expense of readability.
It's like egyptian exception handling. -1
2012/1/12 Manuel Bärenz <manuel at enigmage.de>:
> I propose two new control flows for Python:
>
> "while ... try":
>
> while expr try:
> suite1
> except SomeException:
> suite2
> else:
> suite3
>
> This executes suite1 as long as handled exceptions are thrown and expr
> is True.
> * If an unhandled exception is thrown, it passes the exception on to the
> surrounding or the stack.
> * If no exception occurs, life goes on as normal, suite3 is executed and
> execution goes on afterwards.
>
> The control flow is thus equivalent to:
>
> while expr:
> try:
> suite1
> except SomeException:
> suite2
> else:
> suite3
> break
>
> But it's neater, very natural (in my opinion) and saves an indentation
> level.
>
> One further enhancement: If expr is encountered to be False, some
> special exception "NoMoreTriesException" could be raised. It can be
> catched in the same "while ... try" block.
>
> Usecase:
>
> while network_is_up() try:
> connect_to_server()
> except ConnectError:
> time.sleep(timeout)
> except NoMoreTriesException:
> print("Couldn't establish connection")
> else:
> download_stuff()
> finally:
> make_sure_resource_is_freed()
>
> Another usecase:
>
> while receive_packet() try:
> check_packet()
> except ChecksumError:
> print("You sent the wrong thing. Try again.")
> except NoMoreTriesException:
> print("I couldn't get a single useful packet from you :(")
> else:
> process_packet()
> finally:
> close_connection()
>
>
> A similar thing could be made with "for ... try":
>
> for password in passwords_i_remember try:
> connect(password)
> except WrongPassError:
> pass # No pun intended
> except NoMoreTriesException:
> print("Not a single one worked.")
> else:
> check_mailbox()
>
> The advantages are the same as for "while ... try".
>
> Cheers, Manuel
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas
More information about the Python-ideas
mailing list