Когда каждый тип ошибки применим в Python? - PullRequest
0 голосов
/ 29 апреля 2020

Как узнать, какие типы ошибок (например, TypeError, ValueError) использовать?

Я знаю, что могу выбирать, однако некоторые из них более актуальны, чем другие, в зависимости от контекста?

Пример: не удается добавить ребро на график из-за ограничения ранга узла (я хочу, чтобы это была ошибка, а не просто логическое значение, сигнализирующее об ошибке)

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вы можете найти описания всех исключений по умолчанию здесь: https://docs.python.org/3/library/exceptions.html

Например,

TypeError

Возникает, когда операция или функция применяется к объекту неподходящего типа. Связанное значение представляет собой строку, содержащую сведения о несоответствии типов.

Это исключение может быть вызвано кодом пользователя, чтобы указать, что предпринятая операция над объектом не поддерживается и не предполагается. Если объект предназначен для поддержки данной операции, но еще не предоставил реализацию, NotImplementedError является правильным исключением для вызова.

Передача аргументов неправильного типа (например, передача списка, когда ожидается int) привести к TypeError, но передача аргументов с неправильным значением (например, число за пределами ожидаемых границ) должно привести к ValueError.

ValueError

Возникает при выполнении операции или Функция получает аргумент, который имеет правильный тип, но неуместное значение, и ситуация не описывается более точным исключением, таким как IndexError.

Однако иногда имеет смысл подумать об определении Пользовательское исключение. В вашем случае это может быть

class GraphError(Exception):
    pass

raise GraphError("Node foo - rank limit exceeded")

или

class LinkError(Exception):
    message = "Node {node} - rank limit exceeded"

    def __init__(self, node):
        super(LinkError, self).__init__(
            self.message.format(
                node=node,
            )
        )
        self.node = node

raise LinkError('foo')
1 голос
/ 29 апреля 2020

не удается добавить ребро на график из-за ограничения ранга узла.

Ближайшее исключение при построении, о котором я могу подумать, это либо IndexError, либо RunTimeError, вы можете найти все встроенные исключения и дополнительную информацию об исключениях на этой странице .

Вы также можете создать собственный тип исключения, унаследовав от Exception. См. эту страницу руководства о создании собственного исключения.

class RankLimitReached(Exception):
    pass

raise RankLimitReached
...