Questions tagged «exception»

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

7
开始,救援和确保使用Ruby?
我最近开始使用Ruby进行编程,并且正在研究异常处理。 我想知道ensureRuby是否等效finally于C#?我应该有: file = File.open("myFile.txt", "w") begin file << "#{content} \n" rescue #handle the error here ensure file.close unless file.nil? end 还是我应该这样做? #store the file file = File.open("myFile.txt", "w") begin file << "#{content} \n" file.close rescue #handle the error here ensure file.close unless file.nil? end 不会ensure得到所谓不管,即使一个异常没有什么引发,?

7
我应该针对Python中的错误/非法参数组合引发哪个异常?
我想知道在Python中指示无效参数组合的最佳做法。我遇到过几种情况,其中您具有如下功能: def import_to_orm(name, save=False, recurse=False): """ :param name: Name of some external entity to import. :param save: Save the ORM object before returning. :param recurse: Attempt to import associated objects as well. Because you need the original object to have a key to relate to, save must be `True` for …


11
python异常消息捕获
import ftplib import urllib2 import os import logging logger = logging.getLogger('ftpuploader') hdlr = logging.FileHandler('ftplog.log') formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') hdlr.setFormatter(formatter) logger.addHandler(hdlr) logger.setLevel(logging.INFO) FTPADDR = "some ftp address" def upload_to_ftp(con, filepath): try: f = open(filepath,'rb') # file to send con.storbinary('STOR '+ filepath, f) # Send the file f.close() # Close file …

8
我什么时候应该真正使用noexcept?
该noexcept关键字可以适当地应用于许多功能签名,但我不能确定何时我应该考虑在实践中使用它。根据我到目前为止所读的内容,最后一刻添加noexcept似乎解决了移动构造函数抛出时出现的一些重要问题。但是,对于一些实际的问题,我仍然无法提供满意的答案,这些问题使我不得不首先阅读更多内容noexcept。 我知道有很多函数永远不会抛出的示例,但是编译器无法自行确定。noexcept在所有这种情况下,我都应该在函数声明后附加吗? 必须考虑noexcept在每个函数声明之后是否都需要追加操作,这将大大降低程序员的工作效率(坦率地说,这将是一件痛苦的事情)。在哪些情况下我应该更小心使用它noexcept,在哪些情况下我可以摆脱隐含的含义noexcept(false)? 使用后,我什么时候才能实际观察到性能改善noexcept?特别是,给出一个示例代码,在添加之后C ++编译器能够为其生成更好的机器代码noexcept。 我个人很在乎,noexcept因为为编译器提供了增加的自由度,可以安全地应用某些优化。现代编译器是否noexcept以此方式利用?如果没有,我可以指望其中的一些在不久的将来这样做吗?


18
异常对Java性能有什么影响?
问题:Java中的异常处理是否真的很慢? 常规知识以及许多Google的研究结果都表明,不应将异常逻辑用于Java中的常规程序流程。通常有两个原因, 它确实很慢-甚至比常规代码慢一个数量级(给出的原因各不相同), 和 这很混乱,因为人们希望仅在特殊代码中处理错误。 这个问题是关于#1的。 例如,此页面将Java异常处理描述为“非常慢”,并将这种缓慢与异常消息字符串的创建相关联-“然后,此字符串用于创建抛出的异常对象。这不是很快。” Java中的有效异常处理文章说:“其原因是由于异常处理的对象创建方面,因此使固有的异常抛出速度变慢”。另一个原因是堆栈跟踪生成会减慢堆栈跟踪的速度。 我的测试(在32位Linux上使用Java 1.6.0_07,Java HotSpot 10.0)表明异常处理并不比常规代码慢。我尝试在执行一些代码的循环中运行方法。在方法的最后,我使用一个布尔值来指示是返回还是throw。这样,实际处理是相同的。我尝试以不同的顺序运行这些方法并平均测试时间,以为可能是JVM升温。在我所有的测试中,投掷速度至少与返回速度一样快,甚至不快(高达3.1%)。我完全可以接受我的测试错误的可能性,但是我并没有看到代码样本,测试比较或最近一两年中显示Java异常处理的结果的任何方式慢。 导致我走这条路的是我需要使用的将异常作为常规控制逻辑一部分的API。我想更正它们的用法,但现在可能无法。我是否必须赞扬他们的前瞻性思维? 在《即时编译中的高效Java异常处理》一文中,作者建议即使没有抛出异常,仅存在异常处理程序也足以阻止JIT编译器正确优化代码,从而减慢速度。我还没有检验过这个理论。

16
尝试从列表中删除元素时,为什么会出现UnsupportedOperationException?
我有以下代码: public static String SelectRandomFromTemplate(String template,int count) { String[] split = template.split("|"); List<String> list=Arrays.asList(split); Random r = new Random(); while( list.size() > count ) { list.remove(r.nextInt(list.size())); } return StringUtils.join(list, ", "); } 我得到这个: 06-03 15:05:29.614: ERROR/AndroidRuntime(7737): java.lang.UnsupportedOperationException 06-03 15:05:29.614: ERROR/AndroidRuntime(7737): at java.util.AbstractList.remove(AbstractList.java:645) 这怎么会是正确的方法?Java 15

11
如何记录带有调试信息的Python错误?
我正在使用以下命令将Python异常消息打印到日志文件中logging.error: import logging try: 1/0 except ZeroDivisionError as e: logging.error(e) # ERROR:root:division by zero 除了异常字符串以外,是否可以打印有关异常及其生成代码的更多详细信息?行号或堆栈跟踪之类的东西会很棒。

30
针对检查异常的情况
多年以来,我一直无法获得以下问题的正确答案:为什么有些开发人员反对检查异常?我进行了无数对话,阅读了博客上的东西,阅读了布鲁斯·埃克尔(Bruce Eckel)所说的话(我看到的第一个反对他们的人)。 我目前正在编写一些新代码,并非常注意我如何处理异常。我正在尝试查看“我们不喜欢检查的异常”人群的观点,但我仍然看不到它。 我的每一次对话都以相同的问题为结尾而结束...让我进行设置: 总体而言(根据Java的设计方式), Error 用于永远不应该抓到的东西(VM有花生过敏症,有人在上面撒了一罐花生) RuntimeException 用于程序员做错了的事情(程序员走出了数组的结尾) Exception(除外RuntimeException)用于程序员无法控制的事情(写入文件系统时磁盘已满,已达到该进程的文件句柄限制,并且您无法打开任何其他文件) Throwable 只是所有异常类型的父级。 我听到的一个常见论点是,如果发生异常,那么开发人员要做的就是退出程序。 我听到的另一个常见论点是,检查异常会使重构代码更加困难。 对于“我要做的就是退出”参数,我说即使您要退出,也需要显示一条合理的错误消息。如果您只是在处理错误,那么当程序退出时如果没有明确说明原因的话,您的用户将不会过分高兴。 对于“它很难重构”人群,这表明未选择适当的抽象级别。与其声明方法不会引发IOException,不IOException应该将转换为更适合发生的异常。 我在将Main换成catch(Exception)(或在某些情况下catch(Throwable)确保程序可以正常退出)时没有问题-但我始终会捕获所需的特定异常。这样做至少可以显示一个适当的异常。错误信息。 人们从不回覆的问题是: 如果您抛出RuntimeException 子类而不是Exception 子类,那么您如何知道应该掌握什么呢? 如果答案是Exception问题,那么您也将以与系统异常相同的方式处理程序员错误。对我来说这似乎是错误的。 如果您发现了问题,Throwable那么您将以相同的方式处理系统异常和VM错误(等等)。对我来说这似乎是错误的。 如果答案是仅捕获已知的异常,那么您如何知道抛出了哪些异常?当程序员X抛出一个新异常而忘记捕捉它时,会发生什么?对我来说这很危险。 我会说显示堆栈跟踪的程序是错误的。不喜欢检查异常的人会不会有这种感觉? 因此,如果您不喜欢检查异常,是否可以解释为什么不这样做并回答未得到回答的问题? 编辑:我不是在寻找关于何时使用任何一种模型的建议,我正在寻找的是人们为什么从中扩展,RuntimeException因为他们不喜欢从中扩展Exception和/或为什么他们捕获异常,然后重新抛出RuntimeException而不是向其添加抛出他们的方法。我想了解不喜欢检查异常的动机。

10
在Python中使用try-except-else是否是一种好习惯?
在Python中,我不时看到该块: try: try_this(whatever) except SomeException as exception: #Handle exception else: return something try-except-else存在的原因是什么? 我不喜欢这种编程,因为它使用异常来执行流控制。但是,如果它包含在语言中,则一定有充分的理由,不是吗? 据我了解,异常不是错误,并且仅应将其用于特殊情况(例如,我尝试将文件写入磁盘,并且没有更多空间,或者我没有权限),而不是流控制。 通常,我将异常处理为: something = some_default_value try: something = try_this(whatever) except SomeException as exception: #Handle exception finally: return something 或者,如果发生异常,我真的不想返回任何东西,那么: try: something = try_this(whatever) return something except SomeException as exception: #Handle exception

10
“ throw”和“ throw ex”之间有区别吗?
有些帖子问这两者之间已经有什么区别。(为什么我什至不得不提这个...) 但是我的问题有所不同,在另一种类似于神的错误处理方法中,我称呼为“ throw ex” 。 public class Program { public static void Main(string[] args) { try { // something } catch (Exception ex) { HandleException(ex); } } private static void HandleException(Exception ex) { if (ex is ThreadAbortException) { // ignore then, return; } if (ex is ArgumentOutOfRangeException) { // Log …

30
什么时候抛出异常?
我为我的应用程序不希望遇到的每种情况创建了异常。 UserNameNotValidException,PasswordNotCorrectException等等。 但是,我被告知我不应该为这些条件创建例外。在我的UML中,那些是主流的例外,那么为什么不应该例外呢? 创建例外有任何指导或最佳做法吗?


9
如何为应用程序添加清单权限?
我正在尝试使用HttpURLConnectionAndroid中的HTTP链接来下载文件,但在以下情况下收到此警告LogCat: WARN / System.err(223):java.net.SocketException:权限被拒绝(可能缺少INTERNET权限) 我已经添加android.Manifest.permission了我的应用程序,但是它仍然给出相同的例外。

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.