extending the break statement

anton muhin antonmuhin.REMOVE.ME.FOR.REAL.MAIL at rambler.ru
Wed Oct 22 11:36:25 EDT 2003


Michele Simionato wrote:
> Is there a way of "ending" a module? I would like something like this:
> 
>   # mod.py
>   print 'something here'
>   end() # some mysterious function
>   print 'you should not get here'
> 
>   # main.py
>   import mod
>   print 'it works'
> 
> I cannot use 'sys.exit' in place of ``end()``, since it would exit from 
> the whole program and the line 'it works' would not be printed. 
> I know that I can modify the main program to catch the SystemExit
> exception:
> 
> 
> # main.py
> try: 
>   import mod
> except SystemExit: 
>   pass
> print 'it works'
> 
> but I find it really ugly, since I am forced to change by hand 
> all the scripts importing 'mod'. Moreover, I am abusing ``SystemExit``;
> I should add instead a new built-in exception ``EndModule``, but this 
> requires even more lines of code for something that should be trivial.
> 
> On the other hand, I don't like the ``if 0:`` option, i.e. writing ``mod.py`` 
> in the form
> 
>   # mod.py
>   print 'something here'
>   end() # some mysterious function
>   if 0:
>       print 'you should not get here'
> 
> since it requires re-indenting by hand the (potentially long) block
> of code to be commented out. Yes, I know about C-c->, but honestly
> it is a PITA. Typically, I would like to comment out portions of
> experimental code during debugging; that code will enter in the final 
> program at the end, so I must indent and re-indent it until it works 
> (which means lots of times).
> 
> More in general, one could think of an ``end()`` function with the ability of
> stopping the execution of the current frame and going back to the previous
> frame. One could even terminate classes in this way, i.e. skipping all the
> methods defined after the ``end()``
> 
> .... (some time passes) ...
> 
> BTW, I have just realized that we don't need a new ``end()`` function: it would be 
> enough to extend the ``break`` statement. Currently, it works only inside 
> loops, why not to extend it to terminate classes and modules? IMHO, it would be
> very useful during debugging and refactoring. What do you people think? 
> Or is there already same magic which can do what I ask for?
> If not, take it as a feature request ;-)
> 
> 
> Michele Simionato, Ph. D.
> MicheleSimionato at libero.it
> http://www.phyast.pitt.edu/~micheles/
> ---- Currently looking for a job ----

As a hack:

for _ in "_":
     print "here"
     break
     print "there"

Ugly, but it works.

hth,
anton.





More information about the Python-list mailing list