Очень странное поведение при проверке пустой строки в Pycharm - PullRequest
0 голосов
/ 03 февраля 2020

Я сталкиваюсь с очень странным поведением при написании кода в PyCharm. Подробности приведены ниже:

import csv

ALL_TAGS = set()
def initialize():
    third_tag_file = '3rd_name.txt'
    tag_file = 'nodes.csv'

    # 1. Load 3rd-level tags
    with open(third_tag_file, 'r') as f:
        for line in f:
            if not line:
                print("Empty line? " + line)
                continue
            splited = line.split('\t')
            if len(splited) != 2:
                raise ValueError("Invalid entry?")
            tag = splited[1].strip()
            ALL_TAGS.add(tag)
    print("3rd tag size:", len(ALL_TAGS))

    # 2. Read in CSV file
    with open(tag_file, 'r') as f:
        csv_reader = csv.reader(f, delimiter='\t')
        next(csv_reader, None)
        for row in csv_reader:
            brand = row[0]
            category = row[1]
            effect = row[2]
            ingredient = row[3]
            product = row[4]
            alias = row[5]
            if brand:
                ALL_TAGS.add(brand)
            if category:
                ALL_TAGS.add(category)
            if effect:
                ALL_TAGS.add(effect)
            if ingredient:
                ALL_TAGS.add(ingredient)
            if product:
                ALL_TAGS.add(product)
            if alias:
                ALL_TAGS.add(alias)

    print("all tag size:", len(ALL_TAGS))


if __name__ == "__main__":

    initialize()

Я читаю данные из двух файлов. Второй - CSV, а первый - простой текстовый файл. Логика c очень проста. В текущей форме кода странным является то, что:

            if brand:
                ALL_TAGS.add(brand)
            if category:
                ALL_TAGS.add(category)
            if effect:
                ALL_TAGS.add(effect)
            if ingredient:
                ALL_TAGS.add(ingredient)
            if product:
                ALL_TAGS.add(product)
            if alias:
                ALL_TAGS.add(alias)

Для каждого оператора «if», только первый «if brand» и последний «if alias» завершаются успешно, то есть они добавлен в набор All_Tags. Для всех других операторов if код не входит в локальную область, даже если это не пустые строки. Тем не менее, код работает, как и ожидалось, если я сделаю одно из двух изменений ниже:

1) move the ALL_Tags definition into the initialize() function,
OR
2) comment out all lines on the first reading of the text file, as below:

Commented out:
    # 1. Load 3rd-level tags
    # with open(third_tag_file, 'r') as f:
    #     for line in f:
    #         if not line:
    #             print("Empty line? " + line)
    #             continue
    #         splited = line.split('\t')
    #         if len(splited) != 2:
    #             raise ValueError("Invalid entry?")
    #         tag = splited[1].strip()
    #         ALL_TAGS.add(tag)
    # print("3rd tag size:", len(ALL_TAGS))

Код очень прост, но я не могу понять, почему он не работает, как ожидалось. Я начал использовать PyCharm и иногда обнаруживал, что он не обнаруживает некоторые очень тонкие ошибки, и эта может быть одной из них. Это не дает никакого сообщения об ошибке, но когда я отлаживаю в нем, я обнаружил, что он не работает, как ожидалось. Я не чувствую ошибки в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...