我知道它是邪恶的,但我已经看到一个好程序员编写的代码中的吞没异常.所以我想知道这种不良做法是否至少有一个积极的意义.
换句话说,这很糟糕,但为什么优秀的程序员在极少数情况下会使用它呢?
try
{
//Some code
}
catch(Exception){}
Run Code Online (Sandbox Code Playgroud) 我开发了一个WPF应用程序,当我在调试模式下启动它时,我在输出中看到以下内容:
'WpfApplication1.vshost.exe'(Managed(v2.0.50727)):已加载'C:\ WINDOWS\assembly\GAC_MSIL\System.Deployment\2.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll',已加载符号.System.Deployment.dll中发生类型为"System.Deployment.Application.InvalidDeploymentException"的第一次机会异常附加信息:未设置应用程序标识.
如果我在另一个WPF应用程序中使用此应用程序中的控件,则输出中有7个此类消息.不过,该应用程序运行正常.
你能解释一下抛出这些异常的原因吗?我发现该方法ApplicationDeployment.get_CurrentDeployment
引发了它们.在MSDN中写道,当您"试图从非ClickOnce应用程序调用此静态属性时"出现此异常.我无法理解它的含义.
我发现类似的帖子InvalidDeploymentException - 没有设置应用程序标识但是没有这个问题的答案.
在我的通信层中,我需要能够捕获任何javascript异常,将其记录下来并像往常一样继续.在Clojurescript中捕获异常的当前语法规定我需要指定被捕获的异常的类型.
我试图在catch表单中使用nil,js/Error,js/object,它没有捕获任何javascript异常(可以将字符串作为对象的类型).
我很感激任何提示如何在Clojurescript中本地完成.
我正在使用JUnit为没有单元测试的遗留代码编写一些更高级别的测试.
这些代码中的大部分"吞噬"了各种未经检查的异常,例如NullPointerExceptions(例如,仅通过打印堆栈跟踪并返回null).因此,即使在较低级代码中的各个点处存在级联灾难,单元测试也可以通过.
有没有办法让第一个未经检查的异常测试失败,即使它们被吞下了?
我能想到的唯一选择是编写一个自定义JUnit包装器,重定向System.err然后分析输出异常.
我的问题是:
在哪里/我怎么能自己解决这个问题?/这个"功能"的文档在哪里?
Function demo_problem
{
describe_global_error_variable
$ret_value = "be loud please".extended_property
write-host "returned a value=[$ret_value]."
describe_global_error_variable
}
Function describe_global_error_variable
{
$cnt = $Error.Count
write-host "`$Error .Count=[$($cnt)]."
$i=0
while ($i -lt $cnt) {
write-host "`$Error[$i].Exception.Message=[$($Error[$i].Exception.Message)]"
$i += 1
}
}
$script_block_throws = {
write-host "at beginning of script_block for script_block_throws. `$this=[$this]."
1/0
return $true
write-host "at end of script_block for script_block_throws. `$this=[$this]."
}
$script_block_try_catch_throw = {
write-host "at beginning of script_block for script_block_try_catch_throw. `$this=[$this]."
try
{
1/0
return $true …
Run Code Online (Sandbox Code Playgroud)我需要从for
MATLAB中的循环运行C ++可执行文件。我为此编写了以下代码,
EqNumbers = [17 18 20 21 22 23];
for i = 1:length(EqNumbers)
EqNumber = EqNumbers(i);
WriteRunE_File(EqNumber);
filename=['RunE_1.tcl'];
system(['OpenSees.exe<',filename]);
end
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,它运行良好,但是有时会出现调试错误(如下图所示)。它提示我采取措施,如果我按“中止”按钮,则程序将继续进行下一次迭代。我只想使此过程自动化,对我来说,每次都无法手动按“中止”按钮,因为该程序中有1000多次迭代。
我尝试使用try-catch end
以下方法,但没有达到目的。
EqNumbers = [17 18 20 21 22 23];
for i = 1:length(EqNumbers)
try
% Code to be executed goes here.
EqNumber = EqNumbers(i);
WriteRunE_File(EqNumber);
filename=['RunE_1.tcl'];
system(['OpenSees.exe<',filename]);
catch
disp('An error occurred in Equke');
disp('Execution will continue.');
end
end
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来绕过错误消息或自动按“中止”按钮。这样程序将自动移至下一个迭代。
注意:
我无权访问C ++源代码(我所拥有的都是可执行文件),因此无法更新的值citaR
。这就是为什么我要在MATLAB中寻找解决方法。