Не могли бы вы объяснить этот фрагмент кода в Python - PullRequest
2 голосов
/ 14 ноября 2011

Я новичок в python, и мне нужна помощь в понимании этого фрагмента кода:

for c in [B, C, D]:
   try:
      raise c()
   except D:
      print "D"
    except C:
      print "C"
    except B:
      print "B"

При чтении документации на Python raise() вызывает исключение, но я не могу понять, почемуraise() находится внутри блока try.Не должно ли быть что-то вроде этого:

try:
    //do something
catch:
    raise()

Ответы [ 3 ]

2 голосов
/ 14 ноября 2011

Я полагаю, что Повышение () было помещено непосредственно в try: просто для иллюстрации.И даже обычно вы бы помещали код, вызывающий исключение (т. Е. Содержащий повышение ()) внутри try, не так ли?

2 голосов
/ 14 ноября 2011

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

1 голос
/ 14 ноября 2011

Этот код довольно нелепый, потому что это странный способ делать вещи, но довольно ясно, что происходит. Список [B, C, D] представляет собой список исключений. Поскольку исключение составляет raise d в блоке try, оно немедленно обрабатывается соответствующим обработчиком except (последовательно, обработчиками except B:, except C: и except D:.

Таким образом, этот код эквивалентен:

print "B"
print "C"
print "D"

За исключением того, что он сгенерирует (необученное) исключение, если любой из B, C или D не является исключением.

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