Форум сайта python.su
Доброго времени суток. Может быть кто подскажет. Вопрос по поводу исключений. В питоне моей головной болью стало то что я не могу понять или как-то узнать какие исключения может так или иначе выкинуть функция. Приведу простой пример имеется функция os.path.exists которая по доке возвращает или True или False и никакое исключение выбрасывать вроде не должно. Передал параметр None на что получил исключение TypeError. Данное исключение не обрабатывалось, соответственно и вся прога вылетела с Tracebackom. Кто-нибудь может посоветовать как действовать в таких ситуациях? Или может я чего-то не догоняю и про TypeError писать и не надо было ввиду его очевидности. Но где гарантии что в этой же функции не вылетит ещё какое-нибудь исключение? Ловить все Exception не вариант..
Офлайн
ну, в данном случае с TypeError это, по-моему, очевидно. Естественно, функция ожидает либо str либо unicode объект, и при указании числа, скажем, или того же None будет TypeError. Еще пример:
>>> abs(-1)
1
>>> abs('1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'
>>>
>>> ...
>>> path = None
>>> assert type(path) == type('') or type(path) == type(u'')
>>> os.path.exists(path)
>>> False
>>> ...
Отредактировано (Окт. 25, 2009 13:35:58)
Офлайн
Получается при правильном использовании данной функции она НИКОГДА не выкинет исключения что и описано в доке. Тогда всё складывается на свои места. Cпасибо вам!
Офлайн
Офлайн
slav0nicСогласен, но для начала человеку моя запись будет более понятна, кроме того раскрывает то, что юникод и строка в Python 2.х - разные типы данных, я лично однажды застопорился на этом =), пусть это не станет проблемой для других ).
assert isinstance(path, basestring)
Офлайн