Поскольку Python является динамическим языком, это обычно не хорошая идея дать переменной и функции то же имя. идентификатор () является функцией в Python, таким образом, это, рекомендуют не использовать переменную, названную идентификатором. Мысль об этом, которое относится ко всем функциям, что Вы могли бы использовать... переменную, не должна иметь того же имени как функция.
Поскольку OutOfMemoryError
является ошибкой
, а не исключением
. Поскольку OutOfMemoryError
не является подклассом Exception
, ловушка (Exception e)
не применяется.
OutOfMemoryError
расширяет ] Throwable
, так что вы должны его поймать. Вот обсуждение SO о том, когда (если вообще) следует обнаруживать ошибки. Как правило, поскольку вы ничего не можете с этим поделать, рекомендуется не беспокоиться об обнаружении ошибок в производственном коде. Но, учитывая особый случай, когда вы пытаетесь отладить происходящее, это может быть полезно.
«~ Ошибка» не является «~ исключением».
Вы должны перехватить «Ошибка» или «Выбрасываемый»
OutOfMemoryError расширяет VirtualMachineError, а Exception расширяет Throwable напрямую. Так что это не ловится согласно спецификациям Java. ЕСЛИ вы хотите перехватить все исключения, добавьте в предложение catch (Throwable e), и он у вас будет.
java.lang.OutOfMemoryError не расширяет java.lang.Exception, поэтому он не исключение. OutOfMemoryError расширяет java.lang.Error. Если вы хотите перехватить ошибку, попробуйте следующее:
private void doSomeWork()
{
try
{
processData(); //Causes OutOfMemoryError
System.out.println("This line does not execute");
}
catch (Error e)
{
System.out.println("Exception. This line does not execute.");
//Log error
}
finally
{
System.out.println("finally. This line does execute");
System.out.println("Thread name: " + Thread.currentThread().getName());
}
}
Примечание: Exception and Error расширяет Throwable, поэтому вы также можете использовать Throwable для перехвата обоих.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html
Что я буду обычно это добавление UncaughtExceptionHandler