Questions tagged «exception»

异常是一种异常情况,需要偏离程序的正常流程。通常,异常不应导致完全失败,而应由异常处理程序来处理。异常处理是许多编程语言中的内置构造。通常,通过展开堆栈来处理异常,从而回滚到异常范围之外的已定义状态,然后调用处理程序块或例程。


9
Python中的“内部异常”(带有追溯)?
我的背景是C#,最近刚开始使用Python编程。当引发异常时,我通常希望将其包装在添加更多信息的另一个异常中,同时仍显示完整的堆栈跟踪。在C#中这很容易,但是如何在Python中做到呢? 例如。在C#中,我将执行以下操作: try { ProcessFile(filePath); } catch (Exception ex) { throw new ApplicationException("Failed to process file " + filePath, ex); } 在Python中,我可以执行类似的操作: try: ProcessFile(filePath) except Exception as e: raise Exception('Failed to process file ' + filePath, e) ...但是这丢失了对内部异常的追溯! 编辑:我想同时看到异常消息和堆栈跟踪,并将两者关联起来。也就是说,我想在输出中看到异常X在这里发生,然后异常Y在这里发生-与我在C#中一样。这在Python 2.6中可行吗?到目前为止,看来我能做的最好的(根据Glenn Maynard的回答)是: try: ProcessFile(filePath) except Exception as e: raise Exception('Failed to …

12
如何在Python中使用自定义消息引发相同的Exception?
try我的代码中包含以下代码块: try: do_something_that_might_raise_an_exception() except ValueError as err: errmsg = 'My custom error message.' raise ValueError(errmsg) 严格来说,我实际上是提出了另一个问题 ValueError,而不是ValueError抛出do_something...(),err在这种情况下称为。如何将自定义消息附加到err?我尝试下面的代码,但失败,因为err,一个ValueError 实例,不是赎回: try: do_something_that_might_raise_an_exception() except ValueError as err: errmsg = 'My custom error message.' raise err(errmsg)

13
.NET异常有多慢?
我不想讨论何时以及不引发异常。我希望解决一个简单的问题。99%的情况下,不引发异常的论点围绕它们的缓慢进行,而另一方声称(通过基准测试)速度不是问题。我已经阅读了许多有关某一方面的博客,文章和帖子。那是什么呢? 答案中的一些链接:Skeet,Mariani,Brumme。

9
向异常添加信息?
我想实现以下目标: def foo(): try: raise IOError('Stuff ') except: raise def bar(arg1): try: foo() except Exception as e: e.message = e.message + 'happens at %s' % arg1 raise bar('arg1') Traceback... IOError('Stuff Happens at arg1') 但是我得到的是: Traceback.. IOError('Stuff') 关于如何实现这一目标的任何线索?如何在Python 2和3中做到这一点?
142 python  exception 

28
为什么不在“捕获”或“最终”范围内的“尝试”中声明变量?
在C#和Java(可能还有其他语言)中,在“ try”块中声明的变量不在相应的“ catch”或“ finally”块中。例如,以下代码无法编译: try { String s = "test"; // (more code...) } catch { Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead } 在此代码中,在catch块中对s的引用发生编译时错误,因为s仅在try块的范围内。(在Java中,编译错误是“无法解决”;在C#中,它是“名称s在当前上下文中不存在”。) 解决此问题的一般方法似乎是在try块之前而不是在try块内声明变量: String s; try { s = "test"; // (more code...) } catch { Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead } 但是,至少对我来说,(1)感觉像一个笨拙的解决方案,(2)它导致变量的范围比程序员预期的范围大(方法的整个其余部分,而不仅仅是在上下文中)。最终尝试捕获)。 我的问题是,此语言设计决定(使用Java,C#和/或任何其他适用的语言)背后的基本原理是什么?

3
Android Studio IDE:打破异常
似乎我的Android Studio不想默认中断任何异常。在“任何异常”上启用中断将开始在实际的JDE库中中断。有什么方法可以迫使它仅在我的代码中的异常情况下中断? 来自Visual Studio Universe,在此处查找默认的VS调试行为。

18
java.lang.IllegalStateException:onSaveInstanceState之后无法执行此操作
我正在为我的应用程序使用支持库。在我的FragmentActivity中,我使用AsyncTask从互联网下载数据。在onPreExecute()方法中,我添加一个片段,在onPostExecute()方法中,我再次将其删除。当方向在这两者之间改变时,出现上述异常。请看一下详细信息: private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> { DummyFragment dummyFragment; FragmentManager fm; FragmentTransaction ft; @Override protected void onPreExecute() { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute"); dummyFragment = DummyFragment.newInstance(); fm = getSupportFragmentManager(); ft = fm.beginTransaction(); ft.add(dummyFragment, "dummy_fragment"); ft.commit(); } @Override protected void onPostExecute(String result) { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute"); ft = fm.beginTransaction(); ft.remove(dummyFragment); ft.commit(); } @Override …


8
为什么会引发ConcurrentModificationException以及如何对其进行调试
我正在使用Collection(HashMapJPA间接使用的a ,它确实发生了),但显然代码是随机抛出的ConcurrentModificationException。是什么原因引起的,如何解决此问题?通过使用一些同步,也许吗? 这是完整的堆栈跟踪: Exception in thread "pool-1-thread-1" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(Unknown Source) at java.util.HashMap$ValueIterator.next(Unknown Source) at org.hibernate.collection.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:555) at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130)

12
如何在没有IllegalMonitorStateException的情况下在Java中使用等待和通知?
我有2个矩阵,我需要将它们相乘,然后打印每个单元格的结果。准备好一个单元格后,我就需要打印它,但是例如,即使[2] [0]的结果先准备好,我也需要在单元格[2] [0]之前打印[0] [0]单元格。所以我需要按顺序打印它。所以我的想法是让打印机线程等待,直到multiplyThread通知它准备打印正确的单元格,然后printerThread它将打印该单元格并返回等待状态,依此类推。 所以我有这个线程做乘法: public void run() { int countNumOfActions = 0; // How many multiplications have we done int maxActions = randomize(); // Maximum number of actions allowed for (int i = 0; i < size; i++) { result[rowNum][colNum] = result[rowNum][colNum] + row[i] * col[i]; countNumOfActions++; // Reached …



10
为什么将exception.printStackTrace()视为不良做法?
有一个很大的材料了有这表明印刷异常的堆栈跟踪是不好的做法。 例如从Checkstyle中的RegexpSingleline检查: 可以使用此检查来查找常见的不良做法,例如调用ex.printStacktrace() 但是,我正在努力寻找能够给出正当理由的任何地方,因为肯定可以使堆栈跟踪对于跟踪导致异常的原因非常有用。我知道的事情: 最终用户永远不应看到堆栈跟踪(出于用户体验和安全目的) 生成堆栈跟踪是一个相对昂贵的过程(尽管在大多数“例外”情况下这不太可能成为问题) 许多日志记录框架都会为您打印堆栈跟踪记录(我们不这样做,不行,我们无法轻松更改它) 打印堆栈跟踪不构成错误处理。它应与其他信息记录和异常处理结合在一起。 还有什么其他原因可以避免在代码中打印堆栈跟踪?


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.