2009-11-17 2 views
5

Сегодня у меня было исключение из некоторого кода: «Некоторое исключение было необработанным».Как код в блоке «try ... catch» генерирует необработанное исключение?

Однако этот код явно находился внутри блока «try» структуры «try/catch».

Что мне здесь не хватает?

Update: Это C#

Update: О, забудьте об этом. Оказывается, особый механизм ошибки состоит в том, что я идиот. Для этого нет никаких оснований.

+3

Какой язык/каркас вы используете? – stusmith

+0

Можете ли вы разместить код? –

+0

Если вы разместили свой код, вам может быть легче диагностировать вашу проблему. –

ответ

5

Определяет ли оператор catch конкретный тип исключения?

Если это так, то это приведет только к исключению этого типа.

+0

Я ловлю «Исключение». Разве это не получается? – Deane

+0

Не обязательно, не пытайтесь вообще ничего не указывать в блоке catch. –

2

Были ли вы запущены в отладчике с включенными «break on exceptions»/«break on throw»? В этом случае вы увидите исключение, прежде чем оно будет передано try/catch.

+0

Это было в отладчике, да. Это может быть так. В Visual Studio это где-то настройка? – Deane

+0

Когда вы получили исключение, можете ли вы продолжить, а затем увидеть его в try/catch? Настройки исключения обычно находятся в разделе «Отладка-> Исключения». В зависимости от языка есть разные вещи, которые вы можете сделать. –

1

У меня есть 10 долларов, что говорит об исключении ThreadAbortException или каком-то другом самозавершающем исключении. Если это так, вы должны поймать исключение дважды.

0

Не зная языка, трудно сказать, но многие языки имеют концепцию исключений, которые невозможно поймать - например, в .NET, исключение OutOfMemoryException и ExecutionEngineException (среди прочего) не могут быть пойманы, поскольку они по существу не подлежат восстановлению ,

3

некоторые проблемы, вызванные рекурсией, такие как исключения StackOverFlow и т. Д., Будут вызывать внутри блоков try ... catch, потому что они фактически не выбрасываются из какой-либо конкретной строки кода внутри блока, а скорее из CLR. Это справедливо также для исключений из памяти вне диапазона и других проблем, которые не являются прямым результатом какой-либо одной строки кода.

Может быть, вы говорите о чем-то вроде этого:

alt text

4

Неуправляемые исключения не будут пойманы прилов (Exception е), вы можете попробовать

try 
    { 
    } 
    catch 
    { 
    } 

вместо

 try 
     { 
     } 
     catch (Exception e) 
     { 
     } 
Смежные вопросы