Пара вещей ...
1) когда вы делаете свои собственные исключения, имейте это в виду (если вас это раздражает, то за вас это будет раздражать кого-то другого, если вы сделаете это для чего-то другого). Учитывая, что путь исключения не должен быть типичным путем, время, потраченное на создание исключения, имеет полезную информацию.
2) в качестве общей практики программирования используйте этот стиль, и у вас будет гораздо меньше проблем (да, ваш код будет длиннее с точки зрения строк, но вы сэкономите много времени):
a) никогда не делайте a.b (). C (); do x = a.b (); x.c (); (в отдельных строках), чтобы вы могли видеть, что a было пустым, или если возвращение a.b () пустым.
b) никогда не передавать возврат вызова метода в качестве параметра - всегда передавать переменные. а (Foo ()); должно быть x = foo (); а (х); Это больше для отладки и возможности увидеть значение.
Я не знаю, почему такие среды, как .net и Java, не предоставляют версию среды выполнения, в которой есть больше информации об этих видах исключений, таких как, например, индекс для массива вне границ, имя переменная, когда она равна нулю и т. д.