Как распечатать оператор отказа только после достижения конца l oop в Python? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть небольшой фрагмент кода, и мне нужна помощь в реализации оператора ошибки (No match). Вот фрагмент:

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])

Я перебираю каждый row в csv файле с именем reader и конвертирую каждый элемент в этой строке из строки в int. После этого я сравниваю содержимое списка этой конкретной строки (от 1-го элемента до конца) с двумя функциями, каждая из которых содержит список. Если два списка совпадают, я печатаю row[0], которое просто содержит имя человека, которому принадлежит соответствующий список. Однако, если оба этих оператора if терпят неудачу после прохождения for row in reader: l oop, как я могу go печатать оператор типа No match только один раз? Потому что, если я напишу его внутри l oop, этот оператор будет напечатан row количество раз, а не один раз.

EDIT : Вот моя (неудачная) реализация с использованием идея Бшлютера. Любая помощь будет принята с благодарностью:

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")

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы можете накапливать ошибки, а затем проверять накопление после завершения l oop:

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)
0 голосов
/ 18 июня 2020

Просто добавьте еще один оператор if с и для поиска и вывода на печать без совпадений. добавьте это в конец второго оператора IF

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")
...