Возникновение ошибки при создании объекта в цикле for - PullRequest
0 голосов
/ 01 апреля 2020

Моя проблема на самом деле не конкретный c вопрос, а неожиданное поведение моей программы. Я пытаюсь создать класс Node , который позже я буду использовать для создания класса Tree для построения древовидных структур папок, подпапок и файлов данного каталога.

В настоящее время я создаю класс Узел .

class Node(object):

    def __init__(self, path):
        """Assumes path is a string"""
        self.path = (path, path[:-1])[path.endswith('/')]
        self.name = os.path.basename(self.path)
        if os.path.isdir(self.path):
            self.type = 'Directory'
        elif os.path.isfile(self.path):
            self.type = 'File'
        else:
            raise OSError ('Path is incorrect. It does not lead to a file, nor to a directory')

    def getName(self):
        return self.name

    def getPath(self):
        return self.path

    def getType(self):
        return self.type

    def getInfo(self):
        print(self.type + ' ' + self.name + ' : ' + self.path)

    def getParent(self):
        return Node(os.path.dirname(self.path))

    def getChilds(self, hidden = False):
        return [Node(os.path.join(self.path, child)) for child 
                in os.listdir(self.path) if (child[0] != '.' or hidden)]

    def __str__(self):
        return '<' + self.type + ',' + self.name + '>'

Запуск:

CEA = Node('/Users/alexandrejewell/Desktop/CEA/')
for child in CEA.getChilds():
    child.getInfo()

>>> Directory Database : /Users/alexandrejewell/Desktop/CEA/Database
     : /Users/alexandrejewell/Desktop/CEA/Icon
    Directory VSA : /Users/alexandrejewell/Desktop/CEA/VSA
    Directory Inputs : /Users/alexandrejewell/Desktop/CEA/Inputs

Файл Icon не является допустимый файл и должен вызывать ошибку при создании соответствующего узла, так же, как и при его непосредственном создании:

Icon = Node('/Users/alexandrejewell/Desktop/CEA/Icon')

>>> OSError: Path is incorrect. It does not lead to a file, nor to a directory

Почему этого не происходит? И что я должен сделать, чтобы исправить это и исключить эти узлы из списка узлов, сгенерированных Node.getChilds?

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