Questions tagged «try-catch»

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

9
尝试/捕获+使用正确的语法
哪一个: using (var myObject = new MyClass()) { try { // something here... } catch(Exception ex) { // Handle exception } } 要么 try { using (var myObject = new MyClass()) { // something here... } } catch(Exception ex) { // Handle exception }

21
应该尝试…在循环内还是循环外捕捉?
我有一个看起来像这样的循环: 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 …

6
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()); } 问题是“输出将是什么样?” 我很确定这将是AB2C3,但请注意,这不是事实。 正确的答案是ABC3(经过测试,实际上就是这样)。 我的问题是,Exception(“ 2”)放在哪里?


8
更好地“尝试”某些东西并捕获异常或测试是否有可能首先避免异常?
我应该测试if某种东西是有效的还是只是try为了做它并捕获异常? 有没有可靠的文档说首选方法? 还有一种方法更pythonic吗? 例如,我应该: if len(my_list) >= 4: x = my_list[3] else: x = 'NO_ABC' 要么: try: x = my_list[3] except IndexError: x = 'NO_ABC' 一些想法... PEP 20说: 错误绝不能默默传递。 除非明确地保持沉默。 应该使用a try而不是an if解释为无声传递的错误吗?如果是这样,您是否通过以这种方式使用它来明确使其静音,从而使其正常运行? 我不是指只能以一种方式做事的情况;例如: try: import foo except ImportError: import baz


6
如何不为fs.readFileSync()捕获文件?
在node.js中,readFile()显示了如何捕获错误,但是对于readFileSync()函数,关于错误处理没有任何注释。这样,如果我在没有文件的情况下尝试使用readFileSync(),则会收到错误消息Error: ENOENT, no such file or directory。 我如何捕获抛出的异常?Doco没有说明抛出了什么异常,所以我不知道需要捕获哪些异常。我应该注意,我不喜欢普通的“捕获每个可能的异常”样式的try / catch语句。在这种情况下,我希望捕获当文件不存在并且尝试执行readFileSync时发生的特定异常。 请注意,在执行连接尝试之前,我仅在启动时执行同步功能,因此不需要我不应该使用同步功能的注释:-)

6
从try catch最终阻止中返回是否是错误的做法?
所以今天早上我遇到了一些看起来像这样的代码: try { x = SomeThingDangerous(); return x; } catch (Exception ex) { throw new DangerousException(ex); } finally { CleanUpDangerousStuff(); } 现在,此代码可以正常编译并且可以正常工作,但是从try块中返回并不适合,特别是如果有关联的final。 我的主要问题是,如果最终抛出了自己的异常,将会发生什么?您有一个返回的变量,但也有一个异常要处理...所以我想知道其他人如何从try块中返回?

1
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") } } 但是我想做的是C# catch( WebException ex) { Log(ex.ToString()); } 这可能吗?


9
C#捕获堆栈溢出异常
我有一个递归调用一个引发堆栈溢出异常的方法。第一次调用被try catch块包围,但未捕获异常。 堆栈溢出异常是否以特殊方式表现?我可以正确捕获/处理异常吗? 不确定是否相关,但还有其他信息: 在主线程中没有抛出异常 代码引发异常的对象由Assembly.LoadFrom(...)。CreateInstance(...)手动加载

16
模式避免嵌套尝试捕获块?
考虑一种情况,我有三种(或更多种)执行计算的方法,每种方法都会因异常而失败。为了尝试每次计算直到找到成功的计算,我一直在进行以下操作: double val; try { val = calc1(); } catch (Calc1Exception e1) { try { val = calc2(); } catch (Calc2Exception e2) { try { val = calc3(); } catch (Calc3Exception e3) { throw new NoCalcsWorkedException(); } } } 是否有任何可接受的模式可以更好地实现这一目标?当然,我可以将每个计算包装在一个辅助方法中,该方法在失败时返回null,然后只使用??运算符,但是有一种更通用的方法(即,不必为我要使用的每个方法编写辅助方法) )?我曾考虑过使用泛型编写静态方法,该方法将任何给定的方法包装在try / catch中,并在失败时返回null,但是我不确定如何处理。有任何想法吗?

11
尝试在JavaScript中{}不能捕获{}吗?
我有很多函数,它们要么返回值,要么抛出错误。在主函数中,我分别调用它们,并想返回每个函数返回的值,或者如果第一个函数抛出错误,则继续执行第二个函数。 所以基本上我目前拥有的是: function testAll() { try { return func1(); } catch(e) {} try { return func2(); } catch(e) {} // If func1 throws error, try func2 try { return func3(); } catch(e) {} // If func2 throws error, try func3 } 但是实际上我只想try返回它(即,如果它没有引发错误)。我不需要catch障碍物。但是,类似的代码try {}失败,因为它缺少(未使用的)catch {}块。 我在jsFiddle上举了一个例子。 那么,有什么方法可以catch在达到相同效果的同时移除那些障碍?

7
C ++中的异常如何工作(在幕后)
我一直看到人们说例外情况很慢,但我从未见过任何证据。因此,我将询问异常在后台如何工作,而不是询问它们是否存在,以便我可以决定何时使用它们以及它们是否缓慢。 据我所知,异常与执行多次返回相同,不同之处在于它还会在每次返回之后检查是否需要执行另一个操作或停止操作。如何检查何时停止返回?我猜有第二个堆栈保存异常的类型和堆栈位置,然后它会返回直到到达那里。我还猜测第二个堆栈唯一碰到的是一次掷球和每次尝试/接球。AFAICT使用返回码实施类似行为将花费相同的时间。但这只是一个猜测,所以我想知道真正发生了什么。 异常如何真正起作用?


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.