Любой библиотечный метод, который может принимать аргумент функции, может вызвать любое исключение:
List(1).map(_ => throw new SomeExceptionIJustInvented)
К сожалению, это означает, что в отсутствие сложной системы отслеживания исключений на основе компилятора этодо программиста, чтобы понять, какие исключения могут быть сгенерированы на основе документации библиотеки и опыта.
Если очень важно написать код, устойчивый к исключениям, лучший способ - перехватить все исключенияиз относительно больших блоков кода.Удостоверьтесь, что вы ловите только Exception
, а не все метания, так как вы, вероятно, не можете сделать ничего нормального с ошибкой нехватки памяти.Итак:
try {
// Various stuff
}
catch {
case e: Exception => // Handle the case where stuff fails
}
К счастью, библиотеки Java явно говорят, что они собираются генерировать, а библиотеки Scala почти всегда выдают очень мало и вместо этого возвращают Option
или Either
или имеют какой-то другой способуведомлять вас, когда что-то не сработало, кроме выдачи исключения.Однако библиотеки Scala, использующие библиотеки Java, иногда немного непрозрачны.(Например, если вы делаете IO, вполне безопасно, что IOException
может быть брошено.)