Module (92%)
Section (50%)

Подробная анатомия исключений

Давайте подробнее рассмотрим объект исключения, поскольку здесь есть несколько действительно интересных элементов (мы вернемся к этой проблеме вскоре, когда рассмотрим базовые методы ввода/вывода Python, поскольку их подсистема исключений немного расширяет эти объекты).

Класс BaseException представляет свойство с именем args. Это кортеж, предназначенный для сбора всех аргументов, переданных конструктору класса. Он пуст, если конструкция была вызвана без каких-либо аргументов, или содержит только один элемент, когда конструктор получает один аргумент (здесь мы не учитываем аргумент self) и т.д.

Мы подготовили простую функцию для элегантного вывода свойства args. Вы можете увидеть функцию в редакторе.


Мы использовали функцию для печати содержимого свойства args в трех разных случаях, когда исключение класса Exception вызывается тремя разными способами. Чтобы сделать его более впечатляющим, мы также напечатали сам объект вместе с результатом вызова __str__().

Первый случай выглядит рутинно - после ключевого слова raise есть только имя Exception. Это означает, что объект этого класса был создан самым обычным способом.

Второй и третий случаи могут показаться немного странными на первый взгляд, но здесь нет ничего странного - это всего лишь вызовы конструктора. Во втором операторе raise конструктор вызывается с одним аргументом, а в третьем - с двумя.

Как вы можете видеть, выходные данные программы отражают это, показывая соответствующее содержимое свойства args:

: : my exception : my exception : my exception ('my', 'exception') : ('my', 'exception') : ('my', 'exception')

output



Code

def print_args(args):
lng = len(args)
if lng == 0:
print("")
elif lng == 1:
print(args[0])
else:
print(str(args))


try:
raise Exception
except Exception as e:
print(e, e.__str__(), sep=' : ' ,end=' : ')
print_args(e.args)

try:
raise Exception("my exception")
except Exception as e:
print(e, e.__str__(), sep=' : ', end=' : ')
print_args(e.args)

try:
raise Exception("my", "exception")
except Exception as e:
print(e, e.__str__(), sep=' : ', end=' : ')
print_args(e.args)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×