python: поведение библиотеки при неудачном импорте - PullRequest
1 голос
/ 12 апреля 2011

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

Например, у меня есть что-то вроде этого:

try:
   from argparse import ArgumentParser
except ImportError:
   print('fathom library requires python 3.2 or argparse package.')

Это лучше или хуже?

Ответы [ 3 ]

4 голосов
/ 12 апреля 2011

Библиотека всегда должна вызывать ImportError вместо выхода; программа может захотеть включить его условно (возможно, заменив, если он недоступен).

Если модуль нижнего уровня поднимает ImportError, ваш лучший шанс - повторно поднять его с дополнительной информацией.

2 голосов
/ 12 апреля 2011

Если вы можете, распространите модуль вместе с вашим пакетом, а затем следуйте этому шаблону, чтобы выбрать, какой из них вы используете (предпочитайте Python 3.x один, по умолчанию ваш поставляется).

Если нет, то, как правило, это нормально, если вы также убедитесь, что это не вызывает молча более позднее исключение (т. Е. Убедитесь, что вы выполняете очистку в конце except и, по всей вероятности, либо сбросьте это исключение или выбросьте свое собственное).

PS - Это не было редкостью для simplejson до того, как оно было включено в собственно Python

0 голосов
/ 12 апреля 2011

Это вопрос вкуса.Мне нравится ваш метод, хотя.Это ясно и чисто.

...