简体   繁体   中英

How to print a fail statement only after reaching end of loop in Python?

I have a small code snippet and need help implementing a fail statement ( No match ). Here is the snippet:

for row in reader:
    # converts each string num --> int num
    i = 1
    while i < len(row):
        row[i] = int(row[i])
        i += 1

    if STR_count_large(sequence) == row[1:]:
        print(row[0])

    if STR_count_small(sequence) == row[1:]:
        print(row[0])

I iterate through each row in a csv file called reader , and convert each element in that row from a string to an int. After that, I compare the contents of the list of that particular row (from the 1st element to the end) against two functions that each contain a list. If the two lists match, I print row[0] , which simply contains the name of the person who the matching list belongs to. However, if both of these if statements fail after going through the for row in reader: loop, how would I go about printing a statement like No match only once? Because if I write it inside the loop, this statement would be printed row number of times rather than just once.

EDIT : Here is my (unsuccessful) implementation using bschlueter's idea. Any help would be greatly appreciated:

exceptions = list()
            for row in reader:
                # converts each string num --> int num
                i = 1
                while i < len(row):
                    row[i] = int(row[i])
                    i += 1
                try:
                    if STR_count_large(sequence) == row[1:]:
                        print(row[0])
                    if STR_count_small(sequence) == row[1:]:
                        print(row[0])
                except (STR_count_large(sequence) != row[1:] and STR_count_small(sequence) != row[1:]) as exception:
                    exceptions.append(exception)
            if exceptions:
                print("No match")

You could accumulate errors, then check the accumulation after the completion of the loop:

exceptions = list()
for row in reader:
    try:
        do_a_thing(row)
    except MyException as exception:
        exceptions.append(exception)
# Do something if any exceptions were added to the list
if exceptions:
    handle_exceptions(exceptions)

Just add one more if statement with and for catching and printing no match. add this at the end of second IF statement

if row == reader[len(reader)]:#Check for last iteration
    if STR_count_large(sequence) != row[1:]: and STR_count_small(sequence) != row[1:]:
        print("No Match")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM