使用 instanceof 确定内部错误类型时如何修复 'thrown exception caught locally'
How to fix 'thrown exception caught locally' when using instanceof to determine internal errors type
我有一段代码可以加载一组插件。对于每个插件,都会在 try catch 块中调用一个函数列表,以确定插件是否失败并采取相应措施。同时,插件的多个功能之一可以return一个特定的错误,这意味着插件没有失败但无法使用数据执行下一个功能。
让我们看一个示例(代码是 Typescript,但我将尽可能使其与语言无关):
for each plugin:
try:
plugin.function1(data)
plugin.function2(data)
plugin.function3(data)
try:
plugin.function4(data)
catch error:
if error instanceof PluginNotValidForThisKindOfDataError:
continue
else:
throw error
plugin.function5(data)
plugin.function6(data)
catch error:
log(plugin has failed)
(希望代码足够清晰,有需要我会更新)
可以看出,我执行了 function4
并解析了可能的错误,因为其中一个(有多个)是“可以容忍的”,只是意味着它对 function5
无效function6
和那组特定的 data
。但是,我仍然不得不抛出其他错误,因为它们不好。最后,我捕获了全局错误集以确定插件是否崩溃。
我在 IDE 中得到的 JetBrains(特别是 WebStorm)是一个 thrown exception caught locally
警告。但我无法重新想象如何重做该块以采取不同的行动。我没有使用 throws 作为流程控制,只是传递了错误。
我承认主要问题是在Javascript我做不到catch PluginNotValidForThisKindOfDataError
,这将是最佳情况(希望有一天它会添加)。但是,使用我拥有的工具,我该如何重构它?
非常感谢。
添加到 language-agnostic
和 javascript
因为特定的 Javascript try-catch 方法
我看到三个选项:
理想情况下,插件不会为这样的 non-error 条件抛出错误。相反,让它 return 一个值告诉你问题中的代码它是否应该 运行 函数 5 和 6.
不过,如果您想保持原样,您可以:
忽略警告(可能有一种方法可以在一行中禁用它),或者
不要re-throw;相反,在外部 catch
(log(plugin has failed)
) 中执行相同的操作,然后是 continue
。如果这只是一个函数调用或类似的调用,那么重复并不理想,但也不可怕。如果该步骤有任何复杂性,请将其隔离为一个函数(甚至可能是一个本地函数)并从两个地方调用它。
我有一段代码可以加载一组插件。对于每个插件,都会在 try catch 块中调用一个函数列表,以确定插件是否失败并采取相应措施。同时,插件的多个功能之一可以return一个特定的错误,这意味着插件没有失败但无法使用数据执行下一个功能。
让我们看一个示例(代码是 Typescript,但我将尽可能使其与语言无关):
for each plugin:
try:
plugin.function1(data)
plugin.function2(data)
plugin.function3(data)
try:
plugin.function4(data)
catch error:
if error instanceof PluginNotValidForThisKindOfDataError:
continue
else:
throw error
plugin.function5(data)
plugin.function6(data)
catch error:
log(plugin has failed)
(希望代码足够清晰,有需要我会更新)
可以看出,我执行了 function4
并解析了可能的错误,因为其中一个(有多个)是“可以容忍的”,只是意味着它对 function5
无效function6
和那组特定的 data
。但是,我仍然不得不抛出其他错误,因为它们不好。最后,我捕获了全局错误集以确定插件是否崩溃。
我在 IDE 中得到的 JetBrains(特别是 WebStorm)是一个 thrown exception caught locally
警告。但我无法重新想象如何重做该块以采取不同的行动。我没有使用 throws 作为流程控制,只是传递了错误。
我承认主要问题是在Javascript我做不到catch PluginNotValidForThisKindOfDataError
,这将是最佳情况(希望有一天它会添加)。但是,使用我拥有的工具,我该如何重构它?
非常感谢。
添加到 language-agnostic
和 javascript
因为特定的 Javascript try-catch 方法
我看到三个选项:
理想情况下,插件不会为这样的 non-error 条件抛出错误。相反,让它 return 一个值告诉你问题中的代码它是否应该 运行 函数 5 和 6.
不过,如果您想保持原样,您可以:
忽略警告(可能有一种方法可以在一行中禁用它),或者
不要re-throw;相反,在外部
catch
(log(plugin has failed)
) 中执行相同的操作,然后是continue
。如果这只是一个函数调用或类似的调用,那么重复并不理想,但也不可怕。如果该步骤有任何复杂性,请将其隔离为一个函数(甚至可能是一个本地函数)并从两个地方调用它。