Questions tagged «try-catch»

try-catch是一种语法结构,用于捕获代码段引发的异常

14
捕获java.lang.OutOfMemoryError?
文档的java.lang.Error说: 错误是Throwable的子类,它指示严重的问题,即合理的应用程序不应尝试抓住 但是作为java.lang.Error的子类java.lang.Throwable,我可以捕获这种Throwable类型。 我了解为什么捕获这种异常不是一个好主意。据我了解,如果我们决定捕获它,捕获处理程序不应自行分配任何内存。否则OutOfMemoryError会再次抛出。 所以,我的问题是: 捕捞java.lang.OutOfMemoryError可能是个好主意吗? 如果我们决定进行catch java.lang.OutOfMemoryError,如何确保catch处理程序本身不会分配任何内存(任何工具或最佳实践)?

15
在finally块中引发异常
有没有一种优雅的方法来处理finally块中引发的异常? 例如: try { // Use the resource. } catch( Exception ex ) { // Problem with the resource. } finally { try{ resource.close(); } catch( Exception ex ) { // Could not close the resource? } } 如何避免在try/ catch在finally块?

4
在try-except块中使用python“ with”语句
这是将python“ with”语句与try-except块结合使用的正确方法吗? try: with open("file", "r") as f: line = f.readline() except IOError: <whatever> 如果是这样,请考虑使用旧的处理方式: try: f = open("file", "r") line = f.readline() except IOError: <whatever> finally: f.close() 这里的“ with”语句的主要好处是我们可以摆脱三行代码吗?对于这个用例,这似乎并不吸引我(尽管我知道“ with”语句还有其他用途)。 编辑:以上两个代码块的功能是否相同? EDIT2:前几个答案大体上谈及使用“ with”的好处,但是这里似乎没有什么好处。我们已经(或者应该已经)明确地调用f.close()多年了。我想一个好处是草率的编码器将从使用“ with”中受益。



3
如何捕获死锁引起的SqlException?
我想从.NET 3.5 / C#应用程序捕获,SqlException但前提是它是由 SQL Server 2008实例上的死锁引起的。 典型的错误信息是 Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. 但是,它似乎不是针对此异常的已记录错误代码。 针对他们的消息中存在的Deadlock关键字过滤异常似乎是实现此行为的非常难看的方法。有人知道这样做的正确方法吗?

11
最终尝试和尝试捕获之间的区别
之间有什么区别 try { fooBar(); } finally { barFoo(); } 和 try { fooBar(); } catch(Throwable throwable) { barFoo(throwable); // Does something with throwable, logs it, or handles it. } 我更喜欢第二个版本,因为它使我可以使用Throwable。两种变体之间是否存在任何逻辑差异或首选约定? 另外,有没有办法从finally子句访问异常?

13
是否有一个return语句只是为了满足语法错误的做法?
考虑以下代码: public Object getClone(Cloneable a) throws TotallyFooException { if (a == null) { throw new TotallyFooException(); } else { try { return a.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } //cant be reached, in for syntax return null; } return null;之所以必须这样做,是因为可能会捕获到异常,但是在这种情况下,因为我们已经检查了它是否为空(并且假设我们知道我们正在调用的类支持克隆),所以我们知道try语句永远不会失败。 只是为了满足语法和避免编译错误(在注释中说明将不会到达)而在末尾添加额外的return语句是不好的做法,还是有更好的方法编写这样的代码以使额外的内容返回语句是不必要的吗?
82 java  return  try-catch 

5
如何在Linux中捕获分段错误?
我需要在第三方库清理操作中捕获分段错误。有时会在我的程序退出之前发生这种情况,而我无法解决此问题的真正原因。在Windows编程中,我可以使用__try-__catch做到这一点。是否有跨平台或特定于平台的方法来做到这一点?我在Linux中需要这个,gcc。

6
Node.js捕获生成后引发的ENOMEM错误
使用spawn时,由于抛出ENOMEM(内存不足)errnoException,我的Node.js脚本崩溃了。 错误: child_process.js:935 throw errnoException(process._errno, 'spawn'); ^ Error: spawn ENOMEM at errnoException (child_process.js:988:11) at ChildProcess.spawn (child_process.js:935:11) at Object.exports.spawn (child_process.js:723:9) at module.exports ([...]/node_modules/zbarimg/index.js:19:23) 我已经在为errorandexit事件使用侦听器,但是在发生此错误的情况下不会触发它们。 我的代码: zbarimg = process.spawn('zbarimg', [photo, '-q']); zbarimg.on('error', function(err) { ... }); zbarimg.on('close', function(code) { ... }); 完整的源代码可用。 我有什么办法可以防止脚本崩溃?如何捕获抛出的ENOMEM错误? 谢谢!

2
Swift中的掷球和掷球有什么区别?
经过寻找一些参考的数字出来,-unfortunately-我找不到任何关于理解之间的差异有用-和简单-描述throws和rethrows。当试图了解我们应该如何使用它们时,这有点令人困惑。 我要说的是,我对-default-最为熟悉,它throws具有传播错误的最简单形式,如下所示: enum CustomError: Error { case potato case tomato } func throwCustomError(_ string: String) throws { if string.lowercased().trimmingCharacters(in: .whitespaces) == "potato" { throw CustomError.potato } if string.lowercased().trimmingCharacters(in: .whitespaces) == "tomato" { throw CustomError.tomato } } do { try throwCustomError("potato") } catch let error as CustomError { switch error { …

14
使用try / catch防止应用崩溃
我一直在开发一个Android应用程序,该应用程序try/catch经常使用以防止它崩溃,即使在不需要的地方也是如此。例如, 在视图xml layout与id = toolbar被引用,如: // see new example below, this one is just confusing // it seems like I am asking about empty try/catch try { View view = findViewById(R.id.toolbar); } catch(Exception e) { } 在整个应用程序中都使用这种方法。堆栈跟踪没有打印出来,很难找到问题所在。该应用程序突然关闭,而不打印任何堆栈跟踪。 我请我的长辈向我解释一下,他说: 这是为了防止生产崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。它表明开发人员不知道自己在做什么,并且对此表示怀疑。 这是行业中用来防止企业应用程序崩溃的方法吗? 如果try/catch确实是我们的真正需求,那么是否可以将异常处理程序与UI线程或其他线程连接,并在那里捕获所有内容?如果可能的话,那将是一个更好的方法。 是的,为空try/catch很不好,即使我们将堆栈跟踪或日志异常打印到服务器,try/catch对我来说,将代码块随机地包装在所有应用程序中也没有意义,例如,将每个函数都包含在try/catch。 更新 由于这个问题引起了广泛关注,并且有些人误解了这个问题(也许是因为我没有清楚地表述),所以我将其重新表述。 这是开发人员在这里所做的 一个函数是经过编写和测试的,它可以是一个仅初始化视图的小函数,也可以是一个复杂的函数,在测试后将其包裹在try/catch块中。即使对于永远不会抛出任何异常的函数。 在整个应用程序中都使用了这种做法。有时打印堆栈跟踪,有时只是打印debug log一些随机错误消息。此错误消息因开发人员而异。 通过这种方法,应用程序不会崩溃,但是应用程序的行为无法确定。即使在某个时候,也很难跟踪出了什么问题。 …

8
如何有效地使用PHP中的try…catch块
我在PHP代码中一直使用try..catch块,但不确定是否正确使用了它们。 例如,我的一些代码如下所示: try { $tableAresults = $dbHandler->doSomethingWithTableA(); $tableBresults = $dbHandler->doSomethingElseWithTableB(); } catch (Exception $e) { return $e; } 因此,我将多个数据库操作分组在同一try / catch块中,因为如果任何事务中发生任何异常,我将能够处理它。 我这样做是因为我认为它比: try { $tableAresults = $dbHandler->doSomethingWithTableA(); } catch (Exception $e) { return $e; } try { $tableBresults = $dbHandler->doSomethingWithTableB(); } catch (Exception $e) { return $e; } 虽然,我不确定我在做什么是好的习惯还是只是捕获异常的一种懒惰方式。 我的假设是,仅当异常需要特殊处理时,它才应具有自己的try …

10
抛出或尝试接球
决定是在方法中添加throws子句还是使用try-catch?的一般经验法则是什么? 根据我自己的了解,throws当调用方破坏了合同的末端(传递的对象)时,try-catch应使用;当在方法内部执行的操作期间发生异常时,应使用。它是否正确?如果是这样,应该在呼叫方执行什么操作? PS:通过Google和SO搜索,但希望对此有一个明确的答案。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.