Что рейз в Python рейзит?

Если вы используете выделенную память, то вы не делаете ничего плохого. Это становится проблемой при написании функций (кроме основного), которые выделяют память без ее освобождения и не делают ее доступной для остальной части вашей программы. Затем ваша программа продолжает работать с выделенной ей памятью, но не использует ее. Ваша программа и другие запущенные программы лишены этой памяти.

Редактирование: на 100% невозможно сказать, что другие запущенные программы лишены этой памяти. Операционная система всегда позволяет им использовать ее за счет замены вашей программы на виртуальную память (</handwaving>). Дело в том, что если ваша программа освобождает память, которую она не использует, смену виртуальной памяти с меньшей вероятностью необходимо.

29
задан wilhelmtell 14 October 2010 в 17:00
поделиться

2 ответа

На python2.6

Я предполагаю, что вы ожидаете, что блок finally будет связан с блоком «try», где вы вызываете исключение «B». Блок finally присоединяется к первому блоку try.

Если вы добавили блок исключений во внутренний блок try, то блок finally вызовет исключение B.

try:
  raise Exception("a")
except:
  try:
    raise Exception("b")
  except:
    pass
  finally:
    raise

Вывод:

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    raise Exception("b")
Exception: b

Еще один вариант, объясняющий, что здесь происходит

try:
  raise Exception("a")
except:
  try:
    raise Exception("b")
  except:
    raise

Вывод:

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    raise Exception("b")
Exception: b

Если вы видите здесь, заменив Блок finally с исключением вызывает исключение B.

14
ответ дан pyfunc 14 October 2010 в 17:00
поделиться

Рейз повторно поднимает последнее исключение, которое вы поймали, а не последнее исключение, которое вы подняли

(оставлено для комментариев для ясности)

26
ответ дан 2 revs, 2 users 73% 14 October 2010 в 17:00
поделиться
  • 1
    Ничего себе. Все эти годы использования VS и Окна вывода, и я никогда не знал, что опция существовала. Блестящий! – Mike Gledhill 2 June 2015 в 12:06
  • 2
    Ничего себе. Все эти годы использования VS и Окна вывода, и я никогда не знал, что опция существовала. Блестящий! – Mike Gledhill 2 June 2015 в 12:06
  • 3
    Ничего себе. Все эти годы использования VS и Окна вывода, и я никогда не знал, что опция существовала. Блестящий! – Mike Gledhill 2 June 2015 в 12:06
  • 4
    Ничего себе. Все эти годы использования VS и Окна вывода, и я никогда не знал, что опция существовала. Блестящий! – Mike Gledhill 2 June 2015 в 12:06
  • 5
    Ничего себе. Все эти годы использования VS и Окна вывода, и я никогда не знал, что опция существовала. Блестящий! – Mike Gledhill 2 June 2015 в 12:06
Другие вопросы по тегам:

Похожие вопросы: