Special keyword: ``nobreak`` ============================ Python's ``for`` and ``while`` loop include an ``else`` clause whose meaning is not immediately obvious:: while condition: # some # code # here else: # will be executed only if no # break statement occurred above When I first understood this, I thought *wouldn't it be nice if, instead of using* ``else:``, *one could write something like* ``if not break:`` which uses only existing Python keywords. In theory, it might be possible to do something like this in AvantPy. However, wanting to have a one-to-one keyword translation from one dialect into another (excluding standard Python) whenever possible, I thought that a suggestion made by Raymond Hettinger made the most sense: AvantPy's English dialect thus includes ``nobreak`` as an additional keyword. It can be used instead of ``else`` in the above example:: while condition: # some # code # here nobreak: # will be executed only if no # break statement occurred above When AvantPy encounters a ``nobreak`` keyword, or its equivalent in a file, it tries to determine if such a keyword is indented matching a ``for`` or a ``while`` statement: if that is the case, it replaces by ``else``. ``nobreak`` instead of ``else`` in ``if/else`` ------------------------------------------------------- The ``else`` keyword has a very different meaning when used as part of an ``if`` statement. In this situation, ``nobreak``, or its translation in some other language would make no sense. As a result, if one attempts to write the following:: if condition: # some # code # here nobreak: # more code ``nobreak`` will **not** be replaced by ``else``; instead, an explicit ``raise IfNobreakError`` statement will be inserted and the file transformation will be stopped at that point. AvantPy aims to provide beginner-friendly tracebacks, written in their native language. Since we can identify this incorrect use of ``nobreak`` in the translation phase, it seems logical to ensure that this syntax error will be identified as early as possible, with a meaningful error message provided. What about try/except? ----------------------- The ``else`` keyword can also be used in a ``try/except/else/finally`` block. For now, we assume that, unlike ``nobreak, we do not need any other keyword than ``else``. If it were found that the use of the equivalent of ``else`` in some language would not be appropriate in this construct, we could consider introducing another keyword - perhaps something like ``noexcept``. Is ``nobreak`` really needed? ------------------------------ Python's use of an ``else`` clause in ``for`` and ``while`` loops is rather unusual, relatively poorly known and not easy to understand at first glance. It is for this latter reason that we make it possible to define an alternative keyword ``nobreak`` or an equivalent translation in the user's language. However, given that is not often used, one could argue that it could be left out entirely from AvantPy since AvantPy is intended for beginners. Our decision to include it is to give the possibility, to those instructors that wish to teach such a construct/concept, to use a more natural keyword in their own language; anyone else is free to ignore it.