Tag: try catch

从try try catch块中返回是否是不好的做法?

所以我今天早上碰到一些代码,看起来像这样: try { x = SomeThingDangerous(); return x; } catch (Exception ex) { throw new DangerousException(ex); } finally { CleanUpDangerousStuff(); } 现在这个代码编译得很好,按照它应该的方式工作,但是从try块中返回是不正确的,尤其是如果最后有关联的话。 我的主要问题是如果终于抛出它自己的exception会发生什么? 你有一个返回的variables,但也是一个例外,所以我很想知道别人怎么想从try块中返回?

避免嵌套try catch块的模式?

考虑一种情况,我有三种(或更多)的计算方法,每种方法都可能会失败并产生一个exception。 为了尝试每一个计算,直到find一个成功的,我一直在做以下工作: double val; try { val = calc1(); } catch (Calc1Exception e1) { try { val = calc2(); } catch (Calc2Exception e2) { try { val = calc3(); } catch (Calc3Exception e3) { throw new NoCalcsWorkedException(); } } } 有没有一种更好的方式来达到这个目的? 当然,我可以将每个计算包装在一个帮助器方法中,在失败时返回null,然后使用?? 运算符,但有没有办法更一般地这样做(即不必为每个我想使用的方法编写一个帮助器方法)? 我想写一个静态方法使用generics封装在try / catch中的任何给定的方法,并在失败时返回null,但我不知道如何去做这件事。 有任何想法吗?

如何防止node.js崩溃? 尝试赶上不起作用

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

应该尝试…赶上循环内部或外部?

我有一个循环,看起来像这样: for (int i = 0; i < max; i++) { String myString = …; float myNum = Float.parseFloat(myString); myFloats[i] = myNum; } 这是一个方法的主要内容,其唯一目的是返回浮点数组。 我想要这个方法返回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 […]

Javaexception未捕获?

我有一个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()); } 问题是“产出会是什么样子?” 我非常肯定这将是AB2C3,但惊喜,这是不正确的。 正确的答案是ABC3(testing,真的是这样)。 我的问题是,Exception(“2”)在哪里?

Java尝试赶上最后块没有Catch

我正在审查一些新的代码。 该程序只有一个try和一个finally块。 由于catch块被排除在外,如果try块在遇到exception或可抛出的情况时如何工作? 它是否直接进入到finally块?

Java尝试/捕获/最终的最佳实践,同时获取/closures资源

在做一个学校项目时,我写了下面的代码: FileOutputStream fos; ObjectOutputStream oos; try { fos = new FileOutputStream(file); oos = new ObjectOutputStream(fos); oos.writeObject(shapes); } catch (FileNotFoundException ex) { // complain to user } catch (IOException ex) { // notify user } finally { if (oos != null) oos.close(); if (fos != null) fos.close(); } 问题是Netbeans告诉我resource.close()行抛出一个IOException ,因此必须被捕获或声明。 它也抱怨oos和fos可能还没有初始化(尽pipe没有检查)。 这似乎有点奇怪,看到整个问题是如何停止IOException 。 我的膝盖修复是这样做的: } finally […]

为什么试着{…}最后{…}好; 尝试{…} catch {}不好?

我曾经看到有人说,没有任何争论就使用catch是一种糟糕的forms,特别是如果这种catch没有做任何事情: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } catch // No args, so it will catch any exception {} reader.Close(); 但是,这被认为是很好的forms: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } finally // Will execute despite any exception { reader.Close(); } 据我所知,将清理代码放在finally块中,并在try..catch块之后放置清理代码之间的唯一区别是,如果在try块中有返回语句(在这种情况下,清理代码将在最后运行,但try..catch之后的代码将不会)。 否则,最后有什么特别的?

抛出C ++后调用析构函数吗?

我运行了一个示例程序,确实调用了堆栈分配对象的析构函数,但这是由标准保证的吗?

如何捕获这个错误:“注意:未定义的偏移量:0”

我想赶上这个错误: $a[1] = 'jfksjfks'; try { $b = $a[0]; } catch (\Exception $e) { echo "jsdlkjflsjfkjl"; } 编辑:事实上,我得到了以下行的错误: $parse = $xml->children[0]->children[0]->toArray();