breaking out of outer loops

Rob Gaddi rgaddi at highlandtechnology.invalid
Mon Mar 7 18:29:02 EST 2016


Fillmore wrote:

>
> I must be missing something simple because I can't find a way to break 
> out of a nested loop in Python.
>
> Is there a way to label loops?
>
> For the record, here's a Perl script of mine I'm trying to port...there 
> may be 'malformed' lines in a TSV file I'm parsing that are better 
> discarded than fixed.
>
> my $ctr = 0;
> OUTER:
> while($line = <FILE>) {
>
>      $ctr++;
>      if ($ctr < 5) {next;}
>
>      my @allVals  = split /\t/,$line;
>
>      my $newline;
>      foreach my $i (0..$#allVals) {
>
> 	if ($i == 0) {
> 	    if ($allVals[0] =~ /[^[:print:]]/) {next OUTER;}
>
> 	    $newline =  $allVals[0];
> 	}
>
> 	if (defined $headers{$i}) {
>
> 	    #if column not a number, skip line
> 	    if ($allVals[$i+1] !~ /^\d+$/) {next OUTER;}
>
> 	    $newline .= "\t".$allVals[$i+1];
> 	}
>      }
>      print $newline."\n";
>
> }

You're used to Perl, you're used to exceptions being A Thing.  This is
Python, and exceptions are just another means of flow control.

class MalformedLineError(Exception): pass

for line in file:
    try:
        for part in line.split('\t'):
            if thispartisbadforsomereason:
                raise MalformedLineError()
            otherwisewedothestuff
    except MalformedLineError:
        pass

-- 
Rob Gaddi, Highland Technology -- www.highlandtechnology.com
Email address domain is currently out of order.  See above to fix.



More information about the Python-list mailing list