Python - как отлавливать внешние исключения внутри методов - PullRequest
1 голос
/ 07 мая 2010

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

Пример:

def foo(value):
    print value

foo(x)

Это вызовет исключение NameError, потому что x не объявлен. Я хотел бы поймать это исключение NameError внутри метода foo. Есть ли способ?

Ответы [ 2 ]

9 голосов
/ 07 мая 2010

NameError возникает при попытке оценки x. foo никогда не вводится, поэтому вы не можете поймать NameError внутри foo.

Я думаю, что вы думаете, что когда вы делаете foo(x), вводится foo, а затем x ищется. Вы хотели бы сказать: «Я не знаю, что такое x», вместо того, чтобы позволить NameError подняться.

К сожалению (для того, что вы хотите сделать), Python, как и почти любой другой язык программирования, оценивает свои аргументы перед их передачей в функцию. Нет способа остановить NameError значения, переданного в foo из внутри foo.

1 голос
/ 07 мая 2010

Не совсем, но есть способ отловить каждое исключение, которое не обработано:

>>> import sys
>>> 
>>> def handler(type, value, traceback):
>>>     print "Blocked:", value
>>> sys.excepthook = handler
>>> 
>>> def foo(value):
>>>     print value
>>> 
>>> foo(x)
Blocked: name 'x' is not defined

К сожалению, sys.excepthook называется только " непосредственно перед выходом из программы ", поэтому вы не можете вернуть управление своей программе, тем более вставить исключение в foo().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...