Почему это все еще выбрасывает исключение? - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть фрагмент кода kotlin, где я пытаюсь игнорировать исключение внутри замыкания:

val remainderParts = arrayOf("/Company/Employees/Employee[Name='Michael", "Scott']/Salary", "45000")
var xpath: XPathExpression = (1..remainderParts.size).mapNotNull {
        try {
          XPathFactory.newInstance().newXPath().compile(remainderParts.subList(0, it).joinToString(" "))
        }
        catch (e: TransformerException) {
          null
        }
      }.first()

Но когда код выполняется, TransformerException все равно выбрасывается из блока,Что происходит?

1 Ответ

0 голосов
/ 30 декабря 2018

Вы ловите неправильное исключение.Вы должны поймать XPathExpressionException:

val remainderParts = listOf("/Company/Employees/Employee[Name='Michael", "Scott']/Salary", "45000")
var xpath: XPathExpression = (1..remainderParts.size).mapNotNull {
    try {
        XPathFactory.newInstance().newXPath().compile(remainderParts.subList(0, it).joinToString(" "))
    }
    catch (e: XPathExpressionException) {
        null
    }
}.first()

Если вы не уверены, какое исключение для ловли использовать Exception, который является базовым классом всех исключений, и вывести тип, подобный этому:

// ...
catch (e: Exception) {        
    println(e::class.simpleName) // XPathExpressionException
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...