首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取文件时处理运行时异常

读取文件时处理运行时异常
EN

Software Engineering用户
提问于 2016-04-05 19:20:29
回答 3查看 1.1K关注 0票数 2

假设我从文本文件中读取了一堆数字。每一行最初都是一个字符串,我需要将它解析为一个整数。这是第一个异常可能发生的地方--由NumberFormatException方法引发的Integer.ParseInt。这是一个运行时异常--不受检查的异常,我不需要捕获它,也不必用抛出子句来修饰我的方法。

如果出现此异常,即用户输入了文本文件中的数字,该怎么办?目前,我只是抛出一个新的检查异常(自定义异常),以指示不正确的文件格式。

还有一件事--在我分析了数字之后,我创建了一个对象。然而,当第一个参数大于第二个参数时,对象的构造函数(接受两个ints)抛出一个运行时异常。同样,我应该捕获这个异常并抛出我的自定义异常吗?

EN

回答 3

Software Engineering用户

发布于 2016-05-06 08:46:11

没有简单的答案。把自己放在用户的角色中,想想如果中间有一个数据文件被破坏了,他们会期望什么。

假设我有一个有1200个地址的地址簿,而且有一个您的代码无法阅读的地址簿。作为一个用户,我希望看到1199个地址。我甚至希望收到错误消息吗?我不这样认为。或者最多一次。因为如果我使用一个应用程序,每次我搜索一个地址,我都会收到一条该死的错误信息,我会非常生气的。

假设我的应用程序刚刚收到一个带有财务数据的文件。比如我的公司必须支付217张账单的信息,以及你的代码无法阅读的信息。作为一个用户,我希望被告知这个文件已经损坏,这样我就可以回到发送文件的人那里,得到一个新的文件。忽视一项已经被破坏的法案将是非常非常糟糕的,并可能导致可怕的后果。

所以你看,这要看情况。看看形势,做任何有意义的事情。不要从软件开发人员的角度去做,而是从需要最有用的结果的最终用户的角度去做。

票数 1
EN

Software Engineering用户

发布于 2016-04-05 19:48:52

当然,这取决于系统的实现和复杂程度。但总的来说,我会选择创建类似于FileParsingExceptionObjectBuildingException的东西。

然后,您可能会创建一个ObjectReader类,解析文件并创建对象(可能委托给FileParserObjectBuilder类),捕获这些异常并创建正确的异常。

然后,您可以在堆栈中的某个点捕获异常,在那里您可以给出适当的用户反馈,并可能给出选择另一个文件或其他什么的选项。

好的是,您可以在不对类的用户强制执行复杂性的情况下添加有关错误的相关信息。

例如,您可能不希望客户端类知道该文件必须包含ints,因为这将要求它实现当您的读取器类更改时会中断的逻辑。如果有很多客户,这很快就会变成地狱。(当解析更加复杂时,这可能更有意义)。

票数 0
EN

Software Engineering用户

发布于 2016-04-05 21:35:46

如果您期望脏数据:

脏数据是指某些记录可能是脏的或不正确的。数据质量可能不高。在这种情况下,只需将坏记录推入跳过文件,将其记录下来,然后继续前进到下一个文件。在处理结束时,创建一个带有结果摘要的通知,并注意跳过文件的位置。

这样,我们就可以处理大部分的记录,并记下那些肮脏的记录,以便进行进一步的补救。

如果您期望获得干净的数据:

清洁数据意味着您期望每条记录都是有效的。如果数据不干净,请停止处理并创建警报。此方案将需要对文件中的每条记录进行屏幕前(第一次通过),以确定其是否有效。如果记录都是有效的,那么该文件是好的,可以处理。如果该文件无效,则很可能整个文件将被丢弃,生成该文件的任何人/任何东西都必须创建一个新的文件来处理。

根据您的需求,这两个选项都是可以接受的。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/314837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档