标签: try-catch

如何使用try catch进行异常处理是最佳实践

在保持我同事的代码甚至是自称是高级开发人员的人的同时,我经常看到以下代码:

try
{
  //do something
}
catch
{
  //Do nothing
}
Run Code Online (Sandbox Code Playgroud)

或者有时他们将日志信息写入日志文件,如下面的try catch

try
{
  //do some work
}
catch(Exception exception)
{
   WriteException2LogFile(exception);
}
Run Code Online (Sandbox Code Playgroud)

我只是想知道他们所做的是最佳做法吗?这让我感到困惑,因为在我看来,用户应该知道系统会发生什么.

请给我一些建议.

.net c# exception-handling exception try-catch

198
推荐指数
5
解决办法
32万
查看次数

为什么尝试{...}最终{...}好; 试试{}}抓住{}不好?

我见过有人说使用不带参数的catch是不好的形式,特别是如果catch没有做任何事情:

StreamReader reader=new  StreamReader("myfile.txt");
try
{
  int i = 5 / 0;
}
catch   // No args, so it will catch any exception
{}
reader.Close();
Run Code Online (Sandbox Code Playgroud)

但是,这被认为是好的形式:

StreamReader reader=new  StreamReader("myfile.txt");
try
{
  int i = 5 / 0;
}
finally   // Will execute despite any exception
{
  reader.Close();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,将清理代码放在finally块中并在try..catch块之后放置清理代码之间的唯一区别是,如果你的try块中有return语句(在这种情况下,最后清理代码将是运行,但try..catch之后的代码不会).

否则,最后有什么特别之处?

.net c# exception-handling try-catch try-catch-finally

196
推荐指数
7
解决办法
9万
查看次数

你如何实现重新尝试?

Try-catch旨在帮助进行异常处理.这意味着它将以某种方式帮助我们的系统更加健壮:尝试从意外事件中恢复.

我们怀疑在执行和指令(发送消息)时可能会发生某些事情,因此它会被包含在try中.如果发生几乎意外的事情,我们可以做点什么:我们写下了捕获.我认为我们没有打电话来记录异常.我认为catch块意味着让我们有机会从错误中恢复.

现在,假设我们可以从错误中恢复,因为我们可以修复错误.重做是非常好的:

try{ some_instruction(); }
catch (NearlyUnexpectedException e){
   fix_the_problem();
   retry;
}
Run Code Online (Sandbox Code Playgroud)

这将很快落入永恒循环,但是假设fix_the_problem返回true,那么我们重试.鉴于Java中没有这样的东西,你将如何解决这个问题?解决这个问题的最佳设计代码是什么?

这就像一个哲学问题,因为我已经知道我所要求的并不是Java直接支持的.

java exception-handling exception try-catch

185
推荐指数
9
解决办法
16万
查看次数

即使从不抛出异常,使用try-catch块是否昂贵?

我们知道捕获异常是昂贵的.但是,即使从未抛出异常,在Java中使用try-catch块也是昂贵的吗?

我发现Stack Overflow问题/答案为什么尝试块昂贵?,但它适用于.NET.

java performance try-catch

181
推荐指数
7
解决办法
4万
查看次数

try/catch + using,正确的语法

哪一个:

using (var myObject = new MyClass())
{
   try
   {
      // something here...
   }
   catch(Exception ex)
   {
      // Handle exception
   }
}
Run Code Online (Sandbox Code Playgroud)

要么

try
{
   using (var myObject = new MyClass())
   {
      // something here...
   }
}
catch(Exception ex)
{
   // Handle exception
}
Run Code Online (Sandbox Code Playgroud)

c# using-statement try-catch

178
推荐指数
7
解决办法
9万
查看次数

为什么空捕获阻止了一个坏主意?

我刚刚看到一个关于try-catch问题,人们(包括Jon Skeet)说空的拦截块是一个非常糟糕的主意?为什么这个?没有空的捕获不是错误的设计决定的情况吗?

我的意思是,例如,有时你想从某个地方(网络服务,数据库)获得一些额外的信息,你真的不在乎你是否会收到这些信息.所以你试图得到它,如果有什么事情发生,那没关系,我只会添加一个"catch(Exception ignored){}",这就是全部

exception-handling try-catch

177
推荐指数
8
解决办法
9万
查看次数

应该尝试......赶上环路内外?

我有一个看起来像这样的循环:

for (int i = 0; i < max; i++) {
    String myString = ...;
    float myNum = Float.parseFloat(myString);
    myFloats[i] = myNum;
}
Run Code Online (Sandbox Code Playgroud)

这是方法的主要内容,其唯一目的是返回浮点数组.我希望这个方法null在出现错误时返回,所以我将循环放在一个try...catch块中,如下所示:

try {
    for (int i = 0; i < max; i++) {
        String myString = ...;
        float myNum = Float.parseFloat(myString);
        myFloats[i] = myNum;
    }
} catch (NumberFormatException ex) {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

但后来我还想把try...catch块放在循环中,如下所示:

for (int i = 0; i < max; i++) {
    String myString = ...;
    try {
        float …
Run Code Online (Sandbox Code Playgroud)

java performance loops try-catch

175
推荐指数
6
解决办法
9万
查看次数

没有抓到Java异常?

我对try-catch构造有一个小的理论问题.

我昨天参加了一个关于Java的实践考试,我不明白以下例子:

try {
    try {
        System.out.print("A");
        throw new Exception("1");
    } catch (Exception e) {
        System.out.print("B");
        throw new Exception("2");
    } finally {
        System.out.print("C");
        throw new Exception("3");
    }
} catch (Exception e) {
    System.out.print(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

问题是"输出会是什么样子?"

我很确定它会是AB2C3,但令人惊讶的是,这不是真的.

正确的答案是ABC3(经过测试,确实就是这样).

我的问题是,例外("2")去了哪里?

java exception try-catch

170
推荐指数
4
解决办法
2万
查看次数

如何防止node.js崩溃?try-catch不起作用

根据我的经验,php服务器会向日志或服务器端抛出异常,但node.js只是崩溃.用try-catch包围我的代码也不起作用,因为一切都是异步完成的.我想知道其他人在他们的生产服务器上做了什么.

crash try-catch production-environment node.js

147
推荐指数
5
解决办法
8万
查看次数

powershell 2.0尝试捕获如何访问异常

这是try catchPowerShell 2.0中的内容

$urls = "http://www.google.com", "http://none.greenjump.nl", "http://www.nu.nl"
$wc = New-Object System.Net.WebClient 

foreach($url in $urls)
{
    try
    {
        $url
        $result=$wc.DownloadString($url)
    }
    catch [System.Net.WebException]
    {
        [void]$fails.Add("url webfailed $url")
    }  
}
Run Code Online (Sandbox Code Playgroud)

但我想要做的就是在c#中

catch( WebException ex)
{
    Log(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

powershell try-catch

127
推荐指数
1
解决办法
10万
查看次数