Scala Try,Else,block除外
我有这样的代码:Scala Try,Else,block除外,scala,error-handling,try-catch,Scala,Error Handling,Try Catch,我有这样的代码: val extractInfo: (Array[Byte] => String) = (fp: Array[Byte]) => { val parser:Parser = new AutoDetectParser() val handler:BodyContentHandler = new BodyContentHandler(Integer.MAX_VALUE) val config:TesseractOCRConfig = new Tessera
val extractInfo: (Array[Byte] => String) = (fp: Array[Byte]) => {
val parser:Parser = new AutoDetectParser()
val handler:BodyContentHandler = new BodyContentHandler(Integer.MAX_VALUE)
val config:TesseractOCRConfig = new TesseractOCRConfig()
val pdfConfig:PDFParserConfig = new PDFParserConfig()
val inputstream:InputStream = new ByteArrayInputStream(fp)
val metadata:Metadata = new Metadata()
val parseContext:ParseContext = new ParseContext()
parseContext.set(classOf[TesseractOCRConfig], config)
parseContext.set(classOf[PDFParserConfig], pdfConfig)
parseContext.set(classOf[Parser], parser)
parser.parse(inputstream, handler, metadata, parseContext)
handler.toString
}
使用ApacheTika解析PDF中文本的函数文本
不过,我希望这里有一个Try块,它在parser.parse上运行,如果无法执行,则返回一个空字符串。我不知道如何在Scala中构造这种逻辑。我想您需要的是
这样做的目的是捕获正文中的任何错误,并通过返回空字符串从错误中恢复。我认为您要查找的是 这样做的目的是捕获正文中的任何错误,并通过返回空字符串从错误中恢复。您只需编写
try {
val parser:Parser = new AutoDetectParser()
val handler:BodyContentHandler = new BodyContentHandler(Integer.MAX_VALUE)
val config:TesseractOCRConfig = new TesseractOCRConfig()
val pdfConfig:PDFParserConfig = new PDFParserConfig()
val inputstream:InputStream = new ByteArrayInputStream(fp)
val metadata:Metadata = new Metadata()
val parseContext:ParseContext = new ParseContext()
parseContext.set(classOf[TesseractOCRConfig], config)
parseContext.set(classOf[PDFParserConfig], pdfConfig)
parseContext.set(classOf[Parser], parser)
parser.parse(inputstream, handler, metadata, parseContext)
handler.toString
} catch {
case e: Exception => ""
}
因为try是Scala中的一个表达式,就像if或match一样。但是,如果您打算将其用作sentinel值,也就是说,请稍后通过检查结果是否为空来检查是否发生了错误,不要;使用选项[String]或尝试使用[String]作为返回类型。您只需编写
try {
val parser:Parser = new AutoDetectParser()
val handler:BodyContentHandler = new BodyContentHandler(Integer.MAX_VALUE)
val config:TesseractOCRConfig = new TesseractOCRConfig()
val pdfConfig:PDFParserConfig = new PDFParserConfig()
val inputstream:InputStream = new ByteArrayInputStream(fp)
val metadata:Metadata = new Metadata()
val parseContext:ParseContext = new ParseContext()
parseContext.set(classOf[TesseractOCRConfig], config)
parseContext.set(classOf[PDFParserConfig], pdfConfig)
parseContext.set(classOf[Parser], parser)
parser.parse(inputstream, handler, metadata, parseContext)
handler.toString
} catch {
case e: Exception => ""
}
因为try是Scala中的一个表达式,就像if或match一样。但是,如果您打算将其用作sentinel值,也就是说,请稍后通过检查结果是否为空来检查是否发生了错误,不要;使用选项[String]或尝试使用[String]作为返回类型。这正是我想要的。谢谢。注意,这个scala.util.Try类不同于小写的scala Try/catch/finally关键字语法。我花了一段时间才注意到大写的T,所以这可能会帮助其他人。此外,上面的链接已断开,所以我引用了它的永久导入位置。这正是我要找的。谢谢。注意,这个scala.util.Try类不同于小写的scala Try/catch/finally关键字语法。我花了一段时间才注意到大写的T,所以这可能会帮助其他人。此外,上面的链接已断开,因此我引用了它的永久导入位置。