Long.parseLong("string")如果string不能parsing为long,则会抛出一个错误。 有没有比使用try-catch更快地validationstring的方法? 谢谢
如何在Scala中一次捕获多个exception? 有没有比在C#中更好的方法: 一次捕获多个exception?
我有一个类似于这样的代码: import sys def func1(): func2() def func2(): raise Exception('test error') def main(): err = None try: func1() except: err = sys.exc_info()[1] pass # some extra processing, involving checking err details (if err is not None) # need to re-raise err so caller can do its own handling if err: raise err if __name__ == […]
在C#6.0中引入了“when”关键字,现在您可以在catch块中过滤exception了。 但是这不是一个catch语句里面的if语句吗? 如果是这样,是不是只是语法糖或我错过了什么? 例如一个带有“when”关键字的try catch块: try { … } catch (WebException ex) when ex.Status == WebExceptionStatus.Timeout { //do something } catch (WebException ex) when ex.Status== WebExceptionStatus.SendFailure { //do something } catch (Exception caught) {…} 要么 try { … } catch (WebException ex) { if(ex.Status == WebExceptionStatus.Timeout) { //do something } } catch (WebException ex) { […]
我有一些函数返回的东西或抛出一个错误。 在一个主函数中,我调用其中的每一个函数,并且想要返回每个函数返回的值,或者如果第一个函数抛出错误,则继续执行第二个函数。 所以基本上我现在拥有的是: 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 {}这样的代码会失败,因为它缺less一个(未使用的) catch {}块。 我把例子放在jsFiddle上 。 那么,有没有办法去除那些catch块,同时达到相同的效果?
我在这里相当确信 final int i; try { i = calculateIndex(); } catch (Exception e) { i = 1; } 如果控制达到捕捉块, i不可能已经分配。 但是,Java编译器不同意并声明the final local variable i may already have been assigned 。 在这里还有一些微妙之处,还是这只是Java语言规范用来识别潜在的重新分配的模型的一个弱点? 我的主要担心是像Thread.stop()这样的事情,这可能会导致exception抛出“空气”,但我仍然不知道如何可以抛出后,这显然是最后一个行动在try-block内。 如果允许的话,上面的习语会使我的许多方法更简单。 请注意,这个用例对语言有一stream的支持,比如Scala,它始终使用Maybe monad: final int i = calculateIndex().getOrElse(1); 我认为这个用例是一个非常好的动机,可以允许我在一个特定的情况下, i 绝对没有在catch-block内分配 。 UPDATE 经过一番思考,我更加确定这只是JLS模型的一个弱点:如果我在上面的例子中声明了公理,当控制到达catch-block时, i肯定是未分配的,它不会和其他任何冲突公理或定理。 编译器将不会允许i在读取i之前将其分配给catch-block,所以无论i是否被分配,都不能被观察到。
我一直在我的PHP代码中使用try..catch块,但我不确定是否正确使用它们。 例如,我的一些代码如下所示: try { $tableAresults = $dbHandler->doSomethingWithTableA(); $tableBresults = $dbHandler->doSomethingElseWithTableB(); } catch (Exception $e) { return $e; } 所以我在同一个try / catch块中分组多个数据库操作,因为如果任何事务发生任何exception,我将能够处理它。 我这样做是因为我认为它比以下更具可读性和效率: try { $tableAresults = $dbHandler->doSomethingWithTableA(); } catch (Exception $e) { return $e; } try { $tableBresults = $dbHandler->doSomethingWithTableB(); } catch (Exception $e) { return $e; } 虽然,我不确定我所做的是一个好的做法,或只是一个懒惰的方式来捕捉exception。 我的假设是,只有当一个exception需要特殊处理时,它应该有自己的try / catch块,否则将它们分组在同一个try / catch中应该没问题。 所以我的问题是: […]
有什么区别 try { fooBar(); } finally { barFoo(); } 和 try { fooBar(); } catch(Throwable throwable) { barFoo(throwable); // Does something with throwable, logs it, or handles it. } 我更喜欢第二个版本,因为它使我能够访问Throwable。 这两个变体之间是否有任何逻辑差异或者优先约定? 另外,有没有办法从finally子句中访问exception呢?
我正在构build一个应用程序来从互联网上检索图像。 即使它工作正常,但在应用程序中使用try-catch语句时,速度很慢(错误的给定的URL)。 (1)这是validationURL和处理错误input的最好方法 – 或者我应该使用正则expression式(或其他方法)吗? (2)如果我没有在文本框中指定http://,为什么应用程序试图在本地查找图像? private void btnGetImage_Click(object sender, EventArgs e) { String url = tbxImageURL.Text; byte[] imageData = new byte[1]; using (WebClient client = new WebClient()) { try { imageData = client.DownloadData(url); using (MemoryStream ms = new MemoryStream(imageData)) { try { Image image = Image.FromStream(ms); pbxUrlImage.Image = image; } catch (ArgumentException) { MessageBox.Show("Specified […]
这是一个采访问题: public class Demo { public static void main(String[] args) { System.out.println(foo()); } static String foo() { try { return "try …"; } catch (Exception e) { return "catch …"; } finally { return "finally …"; //got as result } } } 我的问题是为什么没有编译时错误。 当我在finally块中有return语句的时候,它肯定会从finally返回而不是try和catch块。 我试图用-Xlint选项编译这段代码,它给出了一个警告。 warning: [finally] finally clause cannot complete normally