加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 更好地返回None或在获取URL时引发异常?

发布时间:2020-12-16 09:13:25 所属栏目:安全 来源:网络整理
导读:我有一个 Scala帮助程序,目前正在尝试获取一个URL,并返回一个Option [String]与该网页的HTML. 如果有任何异常(格式不正确的URL,读取超时等),或者如果有任何问题,则返回None.问题是,最好只是抛出异常,以便调用代码可以记录异常,或者最好在这种情况下返回None
我有一个 Scala帮助程序,目前正在尝试获取一个URL,并返回一个Option [String]与该网页的HTML.

如果有任何异常(格式不正确的URL,读取超时等),或者如果有任何问题,则返回None.问题是,最好只是抛出异常,以便调用代码可以记录异常,或者最好在这种情况下返回None?

解决方法

创建异常是昂贵的,因为必须填充堆栈跟踪.投掷和捕捉的例外也比正常回报更昂贵.考虑到这一点,您可能会问自己以下问题:

>您是否强制调用者处理错误?如果是这样,不要抛出异常,因为Scala没有强制调用者捕获它们的检查异常机制.
>如果出现错误,是否要包含有关为什么失败的详细信息?如果没有,您可以返回选项[A],其中A是您的返回类型,然后您将有一些(有效内容)或无,没有其他说明.如果是,您可以返回[E,A]或Scalaz验证[E,A].所有这些选项都强制调用者以某种方式解开结果,同时可以自由地处理错误E.现在应该是什么?
>您是否想要在出现故障时提供堆栈跟踪?如果是这样,您可以返回[异常,A]或验证[异??常,A].如果你真的去除了例外,你将需要使用Try [A],其两种可能的情况是Failure(exc:Throwable)和Success(value:A).请注意,您当然会承担创建投掷的费用.如果没有,你可能只是返回[String,A](并且要特别小心地记住,Right是否意味着成功或失败 – 左侧通常用于错误,右侧是“正确”值 – 验证可能更清楚) .如果要选择返回堆栈跟踪,可以使用Lift’s Box [A](可能为Full(validContents)),为空,无任何其他说明(非常类似于此处的Option [A]),或指示失败可以存储错误字符串和/或可抛出(和更多).
>您可能想提供多种迹象表明为什么它失败?然后返回[Seq [String],A].如果你经常这么做,你可能想要使用Scalaz和Validation [NonEmptyList [String],A],这提供了一些其他不错的好东西.查看更多信息或查看these usage examples.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读