多年来,我已经在很多语言中使用了try-catch / except-finally变体,今天有人问我最后是什么意思,我无法回答。 基本上,你为什么最后要发表声明,而不是把它放在整个try-catch块之后呢? 换句话说,下面的代码块有区别: try{ //a} catch {//b} finally {//c} try{//a} catch{//b} //c 编辑: 人们,我终于明白了,我已经使用了很长时间了,但是我的问题是在上面的例子中, //c最后似乎是多余的,不是吗?
假设我们有一个函数在MVC应用程序中为系统中的用户更改密码。 public JsonResult ChangePassword (string username, string currentPassword, string newPassword) { switch (this.membershipService.ValidateLogin(username, currentPassword)) { case UserValidationResult.BasUsername: case UserValidationResult.BadPassword: // abort: return JsonResult with localized error message // for invalid username/pass combo. case UserValidationResult.TrialExpired // abort: return JsonResult with localized error message // that user cannot login because their trial period has expired case UserValidationResult.Success: […]
我从我想要提前退出的一个方法抛出一个Error ,如下所示: // No route found if(null === nextRoute) { throw new Error('BAD_ROUTE'); } 我需要return;吗return; 我throw后的声明? 它现在适用于我。 如果它是多余的,我宁愿不把它,但我不能确定什么不同的浏览器可以做。
我期望在这个程序中调用A::~A() ,但它不是: #include <iostream> struct A { ~A() { std::cout << "~A()" << std::endl; } }; void f() { A a; throw "spam"; } int main() { f(); } 但是,如果我改变最后一行 int main() try { f(); } catch (…) { throw; } 那么A::~A() 被调用。 我正在编译Visual Studio 2005中的“Microsoft(R)32位C / C ++ Optimizing Compiler Version 14.00.50727.762 for 80×86”。命令行是cl […]
我明白,“例外情况是例外”,但除了一遍又一遍的重复,我从来没有find这个事实的真正原因。 因为他们停止执行,所以你不会希望他们使用简单的条件逻辑,但为什么不inputvalidation呢? 假设您要循环input一组input,并捕获每个exception,将它们组合在一起以供用户通知…我总是看到这是某种“错误的”,因为用户始终input错误的input,但是这一点似乎是基于关于语义 。 投入是不是预期的,因此是例外。 抛出exception允许我准确定义StringValueTooLong或IntegerValueTooLow或InvalidDateValue或其他什么错误。 为什么这被认为是错误的? 抛出exception的替代方法是返回(并最终收集)错误代码,或者更糟的是错误string。 然后,我会直接显示这些错误string,或parsing错误代码,然后显示相应的错误消息给用户。 不会将例外视为可延展的错误代码吗? 为什么要创build一个单独的错误代码和消息表,当这些错误代码和消息可以用我的语言已经内置的exceptionfunction进行概括时? 另外,我发现Martin Fowler的这篇文章是关于如何处理这种事情的 – 通知模式。 我不知道我是如何看到这是除了不停止执行的例外。 a:到处都是关于例外的东西。 —编辑— 许多伟大的观点已经提出。 我已经评论了大多数,而且还有很多好处,但我还没有完全确信。 我并不是要主张exception作为解决inputvalidation的正确方法,但是我想find很好的理由,为什么这种做法被认为是如此邪恶,因为似乎大多数替代解决scheme只是变相的例外。
我有一些非常奇怪的行为,似乎导致无声的例外。 我如何编写一个通用的try catch来debugging所有的exception。 有些东西是: try: # something that fails except e: print e 更详细地介绍一下这个问题: 我有一个Django应用程序,在我的计算机上(Ubuntu Linux 8.10)通过runserver和mod-python工作正常。 在部署服务器上(Ubunut Linux 8.10),它通过runserver正常工作,但通过mod-python中的apache失败。 我已经将原因减less到了使用Berkeley DB(bsddb.db)和辅助键的应用程序的一部分。 辅助键的callback方法使用pickle来格式化键。 当我调用一个单一的值时,它失败。 但是,只有当我使用cPickle时才会失败,并且在callback函数之外的相同值上使用pickle也是可行的。 我只是想知道为什么它与cPickle失败。
class throwseg1 { void show() throws Exception { throw new Exception("my.own.Exception"); } void show2() throws Exception // Why throws is necessary here ? { show(); } void show3() throws Exception // Why throws is necessary here ? { show2(); } public static void main(String s[]) throws Exception // Why throws is necessary here ? { […]
使用以下代码运行Excel加载项时出现“HRESULT:0x800A03EC”错误: Excel.Range rng = ActiveSheet.Cells[x, y] as Excel.Range; string before = rng.Value2; string cleanV = System.Text.RegularExpressions.Regex.Replace(before, @"\s+", ""); rng.set_Value(cleanV); 当错误发生时,X和Y被设置为1,因此Excel范围不被违反。 我广泛search并尝试了许多设置单元格值的方法(例如Cells [x,y],range.set_Value()),但是为什么会出现此错误以及如何避免此错误。 任何帮助是极大的赞赏。 以下是例外情况: System.Runtime.InteropServices.COMException was unhandled by user code HResult=-2146827284 Message=Exception from HRESULT: 0x800A03EC Source="" ErrorCode=-2146827284 StackTrace: at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object value) at […]
我在解决一些看起来像这样的代码时遇到了非常痛苦的故障排除经验: try { doSomeStuff() doMore() } finally { doSomeOtherStuff() } 问题很难排除,因为doSomeStuff()抛出一个exception,这又导致doSomeOtherStuff()也抛出一个exception。 第二个exception(由finally块引发)被抛出到我的代码,但它没有处理第一个exception(从doSomeStuff()抛出),这是问题的真正根源。 如果代码是这样说的话,那么问题就显而易见了: try { doSomeStuff() doMore() } catch (Exception e) { log.error(e); } finally { doSomeOtherStuff() } 所以,我的问题是这样的: 是不是一个知名的Java反模式使用没有任何catch块的finally块? (这当然似乎是一个显而易见的反模式的不明显的子类“不要吞噬例外!”)
我如何在Python中loggingexception? 我看了一些选项,发现我可以使用这段代码访问实际的exception详细信息: import sys import traceback try: 1/0 except: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_traceback) 我想以某种方式得到stringprint_exception()抛出到标准输出,以便我可以logging它。