我最近遇到了这个语法的try-catch函数。 struct A { int a; A (int i) : a(i) // normal syntax { try {} catch(…) {} } A () // something different try : a(0) {} catch(…) {} void foo () // normal function try {} catch(…) {} }; 两种语法都是有效的 。 除了编码风格之外,这些语法还有什么技术上的区别吗? 从任何方面来看,其中一种语法是否优于其他语法?
我正在尝试使用JDK 7的“try-catch with resources”语句; IntelliJ强调我的资源线,说 此语言级别不支持“试用资源”。 当我尝试编译时,我得到: java:try-with-resources在-source 1.6中不受支持(使用-source 7或更高来启用try-with-resources) 我检查了为我当前的项目启用了try-with-resources,并且我的项目使用了JDK 7(库:C:\ Program Files \ Java \ jdk1.7.0_11)。 有任何想法吗? 我不知道要改变什么select(如果这甚至是问题)。
我的Node.js脚本崩溃,因为使用spawn时抛出的ENOMEM(内存不足)errnoException。 错误: 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) 我已经使用侦听器的error和exit事件,但他们不会被解雇的情况下,这种错误。 我的代码: zbarimg = process.spawn('zbarimg', [photo, '-q']); zbarimg.on('error', function(err) { … }); zbarimg.on('close', function(code) { … }); 完整的源代码可用 。 有什么我可以做,以防止脚本崩溃? 如何捕捉抛出的ENOMEM错误? 谢谢!
例如: if (true) try { // works as expected with both true and false, but is it legal? } catch (…) { // … } 换句话说, 在if条件之后放置try-block是否合法?
只是好奇:为什么在C# (Java也?) 尝试catch的语法硬编码为多个语句? 为什么语言不允许: int i; string s = DateTime.Now.Seconds % 2 == 1 ? "1" : "not 1"; try i = int.Parse(s); catch i = 0; 这个例子只是为了平凡的目的。 我知道有int.TryParse 。
我遵循Coursera的Scala课程。 我也开始阅读Odersky的Scala书。 我经常听到的是,在函数式语言中抛出exception不是一个好主意,因为它打破了控制stream程,而且我们通常会返回一个带有失败或成功的exception。 Scala 2.10似乎也会提供这个方向的Try。 但是在这本书和课程中,马丁·奥德斯基(Martin Odersky)似乎并没有(至less现在)说exception是不好的,他用了很多。 我也注意到方法断言/要求… 最后,我有点困惑,因为我想遵循最佳做法,但他们不清楚,语言似乎在双向… 有人可以解释我应该在哪种情况下使用?
Java中有没有使用try / catch块的开销,而不是一个if块 (假设所附的代码否则不要求这样做)? 例如,对于string采取以下两个“安全修剪”方法的简单实现: public String tryTrim(String raw) { try { return raw.trim(); } catch (Exception e) { } return null; } public String ifTrim(String raw) { if (raw == null) { return null; } return raw.trim(); } 如果rawinput只是很less为null ,这两种方法之间是否存在性能差异 ? 此外,使用tryTrim()方法来简化代码布局是一个很好的编程模式 ,特别是通过在一个try / catch块中封装代码,可以避免很多if块检查罕见的错误情况? 例如,通常情况下,有一个N parameters的方法,如果任何这样的参数是“无效的”(例如空string或空string),则在其起点附近使用M <= N ,快速失败并确定性地执行。而不影响其余的代码。 在这种情况下, 如果块 ( k是每个参数的平均检查次数,例如k […]
try / catch块中的return语句如何工作? function example() { try { return true; } finally { return false; } } 我期待这个函数的输出是“真实的”,而是“假的”!
我最近接受了采访,面试官要我做技术testing,看看我的知识。 完成之后,他向我反馈了我是如何做到这一点的,我没有想到,也很感激,因为很less有面试官如果不想聘用你。 他告诉我,他看到我的代码不好的一件事是,我在每个写的方法中使用了不止一个try-catch块。 因为我觉得这很有趣,所以这引起我的注意。 我相信目前我应该做一个try-catch块,在那里有一个语义上可区分的代码块,它有一个或多个方法可以抛出需要被捕获的exception。 我遵循的唯一例外是,如果两个方法抛出相同的exceptiontypes,我最好把它们放在不同的try-catch块中,以清楚地区分何时抛出exception和抛出exception的原因。 这与面试官要求我做的事情有很大的不同。 那么每个方法只使用一个try-catch块是一个已知的好习惯? 如果这是一个已知的良好做法,那么做什么好处? 编辑:我非常感谢你的想法,这是非常好的。 虽然注意到我在问这是否是已知的好习惯。 这是,如果大多数程序员会同意这一点,或者这在某些书中被写成一个好的实践
我在Drupal 6 .module文件中有一个PHP函数。 我正在尝试执行初始variablesvalidation之前执行更密集的任务(如数据库查询)。 在C#中,我曾经在我的Try块的开始实现IF语句,如果validation失败,会抛出新的exception。 抛出的exception将被捕获到Catch块中。 以下是我的PHP代码: function _modulename_getData($field, $table) { try { if (empty($field)) { throw new Exception("The field is undefined."); } // rest of code here… } catch (Exception $e) { throw $e->getMessage(); } } 但是,当我尝试运行代码时,它告诉我只能在Catch块内抛出对象。 提前致谢!