This is a "feature" in Python and is indeed the expected behavior (though it's not exactly helpful). Stopping a script in Pythonista does the same thing as pressing Ctrl+C when you run Python in a terminal: it raises a KeyboardInterrupt exception. Normally that causes the script to cleanly stop, while still running all exception handlers. Of course that doesn't help if you catch the KeyboardInterrupt exception, which you are doing indirectly here with the unrestricted except block. As you found out, you can still stop your script by terminating the app though.
If you have a real script where you want to catch exceptions but not prevent stopping the script, you should add the exception type you want to catch to the except block, for example except ValueError. If you want to catch all "normal" exceptions, use except Exception rather than except - the latter catches literally everything, whereas the former lets some "special" exceptions through (like KeyboardInterrupt).
By the way, the code that you posted can actually be stopped, you just need to press the stop button roughly 1000 times. At some point you'll hit Python's default recursion limit, because every time you catch the exception, you call dont_stop_me_now recursively.