问题标签 [try-catch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5454 浏览

perl - 如何在 Perl 中捕获鲤鱼的输出?

我正在编写一个 Perl 模块,并且我正在使用 carp 向调用程序抛出一个非致命警告。

carp 警告工作正常 - 我正在检查输入参数是否满足特定条件 - 如果它不满足条件,则会使用 carp 发送警告,并且模块继续使用参数的默认值而不是调用程序的参数通过了。警告只是通知正在使用默认参数而不是传入的参数。

我的问题是我的测试脚本。我的测试脚本向模块发送了一个错误的参数,我试图捕捉返回的警告消息并确保我得到了正确的警告消息。

我的模块看起来像这样:

我的测试脚本如下所示:

当我运行测试时,我可以在屏幕上看到警告(它必须进入 STDERR),但 $@ 变量的内容是 '' - 空白。

这是我的测试脚本的输出:

如果我将鲤鱼改为呱呱,我的测试脚本就可以工作——它会捕获错误消息(但我只想警告,而不是中止)。

老实说,我对 eval 没有最好的理解——也许这不是捕捉 carp 警告输出的最佳方法。我尝试使用 $SIG{__WARN__},但那也是空的。

有什么方法可以捕获鲤鱼的输出吗?这不是最大的问题,因为这只是在我的测试脚本中,但我仍然想让我的测试脚本正常工作。

提前致谢!

0 投票
15 回答
3165 浏览

c++ - 在 C++ 中模仿 Java 的 try/finally 是否有一个受欢迎的习语?

多年来一直在做 Java,所以一直没有跟踪 C++。语言定义中的 C++ 异常处理中是否添加了finally子句?

是否有模仿 Java 的 try/finally 的流行习语?

我还担心 C++ 没有针对所有可能抛出的异常的终极超类型——比如 Java 的 Throwable 类。

我可以写:

附录编辑:

我最终接受了投票最多的答案,即使用析构函数进行清理。当然,从我自己的评论来看,很明显我并不完全同意这一点。然而,C++ 就是这样,所以在我想到的应用程序努力中,我将或多或少地努力坚持共同的社区实践。我将使用模板类来包装还没有类析构函数的资源(即 C 库资源),从而赋予它们析构函数语义。

新附录编辑:

嗯,而不是finally然后是一个关闭功能?结合 ScopeGuard 方法的闭包(请参阅下面的答案之一)将是一种通过任意操作完成清理并访问清理代码的外部范围上下文的方法。清理可以以 Ruby 编程中的惯用方式完成,在打开资源时它们提供清理块。是否没有考虑 C++ 的闭包功能?

0 投票
7 回答
301 浏览

c# - 处理异常与首先防止它们发生 - C#

我有一个带日期时间的 asp:BoundColumn?asp:GridView 中的数据(我将其称为 X 列)。我遍历网格中的所有行,并将 .Text 属性转换为 X 列到 DateTime(我需要它来做一些检查并在需要时更改单元格背景颜色)。

我有两个选择:

  1. 将强制转换包装在 try/catch ... 处理 FormatException (以防 X 列在其中呈现一些垃圾)... 并且仅使用有效的 DateTime 值。

  2. 在大小写之前检查 X 列以确保其格式正确(如何?),并且仅在格式正确时才进行转换。

我应该采取哪种方法,为什么?

谢谢你。

ps 1 投票赞成所有解释,接受 TryParse 的答案

Edit2:即使我使用了 TryParse,我也没有选中接受的答案以继续讨论。

我的“好数据”/“坏数据”比率约为 2/1 - 这意味着大量错误输入

如果没有其他问题,我将在几天内重新接受答案。

0 投票
6 回答
8740 浏览

c++ - 捕获 c++ 基本异常

在我的项目中,我们有一个基本异常。用于处理显示错误对话框、日志等。我正在寻找一种方法来处理该异常的所有派生类,我认为这会起作用:

因为每个抛出的子实例都可以由指向其父实例的指针表示。但是不,当现在抛出异常时,它是一个未处理的异常。

为什么是这样?c++ 只抛出异常作为引用吗?从而使我的 catch 块无用?但是为什么这首先会编译呢?

我能想到的唯一其他方法是:

这似乎有点丑陋。这样做的正确方法是什么?没有基础异常类?还是可以按照我想要的方式解决?

Ps:handle_error()做的只是利用基类函数display_message_box()并干净地关闭程序。

0 投票
1 回答
1347 浏览

sql-server-2005 - 在 SQL Server 2005 中使用 try...catch 创建触发器

我已经实现了以下触发器:

很显然是从另一个表中取出一组外键然后删除当前记录。这样做是因为在删除时将外键设置为 null 不起作用。

我的问题是关于将此触发器包装在 try...catch 块中,如果发生异常,我可以在其中回滚。这是一种好的做法吗?我应该为这种触发器做吗?

谢谢,杰森

0 投票
7 回答
13693 浏览

javascript - Javascript:IF 块或 TRY/CATCH 哪个更有效?

我喜欢关于这段代码更有效的一些其他意见。基本上在下面的代码中,有一个 setInterval 循环,在代码在循环中运行之前,我需要满足 4 个要求。所以在 v.1 中我写了一个 if 语句检查所有 4。工作正常。

然后我切换到只使用 try/catch,而我想要执行的代码位于 try{} 中。逻辑是在每个循环期间,都会生成一个异常,但会为每个无效条件抑制。在所有条件都为真的最后一个循环中,代码执行并清除间隔。

要么工作。我喜欢 try/catch 方法,因为我需要编写的条件代码更少并且担心会破坏。但我担心 try/catch 效率很低,尤其是在 setInterval() 循环达到 100 毫秒时。其他聪明人对 SO 有什么看法?

试着抓

中频块

0 投票
6 回答
5927 浏览

sql-server - SQLServer 尝试捕获性能

有没有人发现在 sql server 2008 中使用 BEGIN TRY..END TRY 与旧的 IF @@ERROR <> 0 相比有任何性能提升/折衷?只是想知道是否存在性能损失。

0 投票
3 回答
5897 浏览

c++ - 如何在 Linux C++ 中捕获系统级异常?

不调用以下 catch():

有没有办法捕捉这种异常?

0 投票
3 回答
579 浏览

c# - 可以在实体框架的 CreateOrUpdate 方法中依赖 try-catch 吗?

这样做可以接受吗?首先尝试添加实体。如果添加失败,没关系,因为这意味着实体已经存在?

还是有更优雅/更简单的解决方案?

好的,我将其缩短为...

0 投票
3 回答
4753 浏览

c# - 捕获中的 MessageBox.Show 问题

当我尝试运行以下代码时,它会导致未处理的异常。经过对代码的大量修改后,如果注释掉 MessageBox.Show 行,我发现问题就消失了!不同寻常的是,我在代码的其他部分的其他 catch{ } 段中使用了 MessageBox.Show 语句,没有任何问题。我的问题是有谁知道它为什么会导致异常?

(Ps Reports_Group_Chooser 是一个 ComboBox)

编码:

错误(大部分):

未处理的异常:System.NullReferenceException:对象引用未设置为 System.Windows.Forms.ComboBox.DropDownListBoxFinished () [0x00000] at (wrapper remoting-invoke-with-check) System.Windows.Forms.ComboBox 处的对象实例:DropDownListBoxFinished () 在 System.Windows.Forms.ComboBox+ComboListBox.HideWindow () [0x00000] 在 System.Windows.Forms.ComboBox+ComboListBox.OnMouseUp (System.Windows.Forms.MouseEventArgs e) [0x00000] 在 System.Windows .Forms.Control.WmLButtonUp (System.Windows.Forms.Message& m) [0x00000] 在 System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x00000] 在 System.Windows.Forms.ComboBox +ComboListBox.WndProc (System.Windows.Forms.Message& m) [0x00000] 在 System.Windows.Forms.Control+ControlWindowTarget。OnMessage (System.Windows.Forms.Message& m) [0x00000] 在 System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x00000] 在 System.Windows.Forms.NativeWindow.WndProc ( IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) [0x00000] 在 System.Windows.Forms.XplatUIX11.DispatchMessage (System.Windows.Forms.MSG & msg) [0x00000] 在 System.Windows.Forms.XplatUI.DispatchMessage (System .Windows.Forms.MSG& msg) [0x00000] 在 System.Windows.Forms.Application.RunLoop(布尔模式,System.Windows.Forms.ApplicationContext 上下文)[0x00000]WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) [0x00000] 在 System.Windows.Forms.XplatUIX11.DispatchMessage (System.Windows.Forms.MSG & msg) [0x00000] 在 System.Windows.Forms.XplatUI.DispatchMessage (System.Windows.Forms.MSG& msg)[0x00000] 在 System.Windows.Forms.Application.RunLoop (布尔模式,System.Windows.Forms.ApplicationContext 上下文)[0x00000]WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) [0x00000] 在 System.Windows.Forms.XplatUIX11.DispatchMessage (System.Windows.Forms.MSG & msg) [0x00000] 在 System.Windows.Forms.XplatUI.DispatchMessage (System.Windows.Forms.MSG& msg)[0x00000] 在 System.Windows.Forms.Application.RunLoop (布尔模式,System.Windows.Forms.ApplicationContext 上下文)[0x00000]

任何帮助感谢迈克尔

更新这是我的代码中一个工作 MessageBox.Show 的示例,它不会导致错误:

更新更新:

似乎问题只是在组合框事件中有 MessageBox.Show:以下代码仍然显示相同的错误: