Как указать аргументы исключения в python?

Как установить аргументы при создании исключения? Где я могу найти список аргументов, доступных для каждого подкласса Exception? Каковы лучшие практики?

Например, если я знаю, что файл не существует, как вызвать исключение FileNotFoundError(missing_file)?

Это показывает список членов исключения FileNotFoundError:

>>> [a for a in dir(FileNotFoundError) if a>'a']
['args', 'characters_written', 'errno', 'filename', 'filename2', 'strerror', 'winerror', 'with_traceback']

Это показывает, что можно установить некоторые аргументы при создании исключения:

>>> FileNotFoundError(1,2,3,4,5).filename
3
>>> FileNotFoundError(1,2,3,4,5).filename2
5

И это показывает, что эти аргументы что-то значат:

>>> raise FileNotFoundError(1,2,3,4,5)
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    raise FileNotFoundError(1,2,3,4,5)
FileNotFoundError: [WinError 4] 2: 3 -> 5

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

Документация raise, FileNotFoundError документации или этот пост не говорит об аргументах исключения.


person stenci    schedule 26.08.2015    source источник
comment
Неполный ответ, но есть список исключений здесь.   -  person CasualDemon    schedule 26.08.2015
comment
@CasualDemon Это одна из ссылок в моем вопросе.   -  person stenci    schedule 26.08.2015
comment
Ах, пропустил эту мысль, что это был просто кодовый блок. Эти элементы фактически определены в OSError (но не в Exception или BaseException), а не только в FileNotFoundError, и могут быть установлены и доступны как обычно, как этот ответ.   -  person CasualDemon    schedule 26.08.2015
comment
@CasualDemon FileNotFoundError в моем вопросе - это просто пример. Я ищу общий способ решения всех аргументов всех встроенных исключений. Они встроены, задокументированы, но без документации по аргументам. Третий ответ на сообщение, на которое вы ссылаетесь, пытается ответить на мой ответ, но только для OSError и без объяснения аргументов.   -  person stenci    schedule 26.08.2015


Ответы (1)


Глядя на страницу, на которую вы ссылаетесь для FileNotFoundError, говорится, что это подкласс OSError, который имеет подпись

OSError(errno, strerror[, filename[, winerror[, filename2]]])

Можно разумно предположить, что конструктор подкласса имеет ту же сигнатуру.

person user1071847    schedule 16.10.2017
comment
Смотрите мой 4-й комментарий к посту - person stenci; 17.10.2017
comment
@stenci: вы поднимаете очень хороший вопрос; Я сам просмотрел документацию, и я согласен, что она странно скудна по этому вопросу. Если я узнаю больше информации, я отредактирую свой ответ. - person user1071847; 18.10.2017