exception-handling 相关问题

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

处理空值的最佳做法是什么?

我有一个应用程序,该应用程序使用其方法之一将DNS主机名解析为IP问题是,如果将解析此方法的方法传递为null,那么最好的做法是什么 有几种选择: 抛出Arg...

回答 6 投票 2

Python 3:在异常中引发异常

下面的代码是不好的做法吗 它按照我想要的方式工作,但是找不到其他在另一个异常中引发异常的其他示例。 如果这是一个不好的做法,那么这样做的理想方法是什么 这段代...

回答 0 投票 0

是否可以在laravel中为后端和前端创建单独的错误页面?

我目前在我具有公众视野的项目中工作,即出于管理目的的前端和后端。 当遇到 错误时,我想为后端和前端显示单独的错误页面。 在laravel中可以做吗 还是我们也...

回答 1 投票 0

使用异常或自定义类在Java中的两层之间进行通信的最佳方法

我正在编写一个应用程序,在其中我困惑如何在业务层和服务层之间进行通信。 让我通过举例说明我的观点: createStusdentRecord是服务层中的方法,...

回答 1 投票 1

Symfony2内核异常事件在生产模式下不处理致命错误异常

我为异常处理做了一个监听器。 以下是我的代码 services.yml ExceptionListener.php 我需要为生产模式中的致命异常做些什么额外的...

回答 2 投票 3

仅在生产模式下的异常通知程序?

我使用异常通知程序来处理我的应用程序和 config initializers exception notification.rb错误,我有以下内容: 但是通...

回答 1 投票 0

Python:在API中引发异常的最佳做法

我正在编写一些模块来编写AbcStore ,在这里我必须引发一些异常,例如TypeError, AttributeError, os.error, NotIm...

回答 0 投票 2

开发Android应用程序的最佳做法

你们中的大多数人可能会认为这是一个非常笼统的问题,但我仍然认为应该做到这一点: 开发Android应用程序时,最佳做法是什么,以便它可以以不强制关闭的方式处理...

回答 3 投票 0

用于动态创建异常的工厂模式

我已经创建了Exception xml,并动态创建并抛出异常。 com.package.CheckedException ] >> 嗯,以科学的名义,这是您可以做到的方式。我会建议这样做吗?绝对不是。我自己会做任何远程的事情吗?可能不是。 public class ExceptionFactory { public static void throwException(String className) throws CheckedException, UncheckedException { Class<?> exceptionClass; try { exceptionClass = Class.forName(className); } catch (ClassNotFoundException e) { throw new IllegalArgumentException(e); } try { if (CheckedException.class.isAssignableFrom(exceptionClass)) { throw exceptionClass.asSubclass(CheckedException.class) .newInstance(); } else if (UncheckedException.class .isAssignableFrom(exceptionClass)) { throw exceptionClass.asSubclass(UncheckedException.class) .newInstance(); } else { throw new IllegalArgumentException( "Not a valid exception type: " + exceptionClass.getName()); } } catch (InstantiationException | IllegalAccessException e) { throw new IllegalStateException(e); } } public static void main(String... args) { try { throwException("CheckedException"); } catch (CheckedException e) { System.out.println(e); } catch (UncheckedException e) { System.out.println(e); } } } class CheckedException extends Exception { } class UncheckedException extends Exception { } 我看不出这家工厂的意义。即使您可以使用它(通过将所有异常作为单个祖先类的子类抛出),它的用法也将如下所示: .... if (somethingInWrong) { ExceptionFactory.throwException("SomeKey"); } .... 对于每个键,您仍然必须创建一个异常类以映射到它。可以说SomeKeyException是映射到“ SomeKey”的异常。 在那种情况下,简单地写就更安全了: .... if (somethingInWrong) { throw new SomeKeyException(); } .... 这样,编译器会检查您是否正在创建它实际上知道的异常类。如果使用Factory,则可能会使用不是有效密钥的某些String,并且编译器将无法对其进行任何处理。只有在运行时,您的Factory才会找不到映射到无效密钥的异常。 一些调整: public static void throwException(final String key) throws Throwable { ExceptionMapping exceptionMapping = exceptionMappings.getExceptionMappings().get(key); if (exceptionMapping != null) { try { Class<Throwable> exceptionClass = (Class<Throwable>)Class.forName(exceptionMapping.getClassName()); try { throw exceptionClass.cast( exceptionClass.newInstance() ); // line X } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 无需使用反射(正如我在you shouldn't use reflection unless you really have to...上面所说的那样)。 您可以将异常类实现为如下形式: class MyExceptions { static void myExceptionsThrower(String key) throws Exception { if("illegalstate".equals(key)) { throw new IllegalStateException("that's my IllegalStateException bro!"); } else if("illegalaccess".equals(key)) { throw new IllegalAccessException("that's my IllegalAccessException bro!"); } // etc... } } 并用于: MyExceptions.myExceptionsThrower(key); 这是我参加这场德比大赛的机会。 :-) [其他答案已评论了这是否是合理的设计。为了解决这个问题,我将这些问题放在一边。 我的一些烦恼是不必要的警告(即使被压制了),并且没有报告实际出问题的异常。特别是仅打印出堆栈跟踪通常是不够的。是的,这只是测试代码,但是在处理这样的代码(甚至是旨在引发异常的代码)时,人们真的应该考虑如何处理错误。在这种情况下,我选择将这些类型的错误表示为InternalError的实例,因为配置或任何可能以多种方式出错的错误。具体来说:如果找不到该类,则找到该类,但该类不是CheckedException或UncheckedException的子类型(甚至不是普通类),或者没有no-arg构造函数,或者无法访问。 某些建议的解决方案的另一个问题是,如果异常类名称为"java.lang.InstantiationException"(或其他内部捕获的异常之一),则可能在内部构造,引发然后捕获该异常类型的实例,从而导致在堆栈跟踪中,但实际上并未引发请求的异常。我通过线性化逻辑而不是嵌套try-catch块来避免这种情况。 最后,我将创建异常的代码提取到单独的方法中,以便可以将它用于已检查和未检查的情况。如果重新排列异常层次结构以仅允许单个根异常(我建议不选中)并且具有在Web层处理或扔给调用者的异常子类型,则可以大大简化此过程。 static void throwException(final String exClassName) throws CheckedException, UncheckedException { Class<?> clazz; try { clazz = Class.forName(exClassName); } catch (ClassNotFoundException cnfe) { throw new InternalError(exClassName, cnfe); } if (CheckedException.class.isAssignableFrom(clazz)) { throw newException(clazz.asSubclass(CheckedException.class)); } else if (UncheckedException.class.isAssignableFrom(clazz)) { throw newException(clazz.asSubclass(UncheckedException.class)); } else { throw new InternalError(exClassName + " is not a valid exception"); } } static <X extends Throwable> X newException(Class<X> clazz) { X x; try { x = clazz.newInstance(); } catch (InstantiationException|IllegalAccessException e) { throw new InternalError("creating instance of " + clazz, e); } return x; } 这可能是帮助 ,以创建自定义先决条件例外,以避免如果条件多则]。在检查null 指针时创建前提条件异常。 class Preconditions { /** * <p> * Checks the value to be null and if null throws a new Exception with the message given. * Used to reduce checking if conditions for complexity. * </p> * @param val - val to check null * @param exceptionClass - exception class to be thrown * @param args - message to be called for throwing exception * @throws Throwable - Common Throwable Exception. */ public static void checkNotNull(final Object val, final Class<?> exceptionClass, final Object ...args) throws Throwable { Class<?>[] argTypes = new Class<?>[args.length]; Arrays.stream(args).map(WithIndex.indexed()).forEach(arg ->argTypes[arg.index()] = arg.value().getClass()); if (null == val) throw (Throwable) exceptionClass.getConstructor(argTypes).newInstance(args); } } 然后您可以在代码中使用它: PreConditionUtil.checkNotNull(objectToCheck, CustomException.class, ErrorCode, "your error message", ...);

回答 6 投票 8

如何在C#中获取异常类型

我想检查服务器是否不可访问,以及服务器是否不可访问,我想在登录页面上打印一条友好的消息。就像当用户输入其凭据时,我得到一个网络-...

回答 8 投票 9

未处理的异常在被捕获后仍会使应用程序崩溃

我有一个WPF应用程序,其中包含具有表单,类,基类等的多个项目。由于代码量很大,我想确保是否确实发生异常,我可以捕获它,...

回答 2 投票 3

Exception.Message与Exception.ToString()

我有正在记录Exception.Message的代码。但是,我读了一篇文章,指出最好使用Exception.ToString()。使用后者,您可以保留有关...

回答 7 投票 188

在Java中,在不引发任何异常之前继续调用函数的最佳方法是什么?

在我的Java代码中,我有一个名为getAngle()的函数,该函数有时会引发NoAngleException。以下代码是编写函数的最佳方式,该函数不断调用getAngle()直到没有...

回答 8 投票 6

例外:重新抛出和多个catch块

我有一种情况,我想在catch块内重新抛出异常,并用更通用的catch捕获它。示例:尝试{somethingThatMightThrowExceptions(); } catch(...

回答 2 投票 1

C#中的自定义异常

我想知道下面的代码是否演示了C#中的自定义异常?公共类NoBobException:异常{public NoBobException():base(“文本框中没有Bob”)...

回答 2 投票 0

Python结构,失败时发送通知

我一直在尝试找出当我的结构脚本失败时最好的方法是什么(例如,通过python模块slackbot发送一个松弛通知消息)。我举了一个例子,其中...

回答 2 投票 2

Java的异常处理的目的

我碰到下面的疑虑,同时学习Java的异常处理,大多数(几乎所有)的例子我见过thows使用try博克异常及相应的捕捉消息输出到用户...

回答 4 投票 0

Python的崩溃,当我尝试打开一个自定义的进口PyQt5窗口类

我有点菜鸟,当它与PyQt5涉及到Python中,更应如此。随着中说,我不知道如何使用我收到错误向前移动,我希望有人可以给我一些...

回答 1 投票 0

尝试,除非/ if语句组合 - 缺少结果

我比较与其他12所列出的大学之一名单,发现模糊字符串匹配和写所有的结果为csv。我没有做模糊字符串匹配到一个大名单,因为我需要知道什么?

回答 1 投票 -1

无效的文件句柄(也许其他无效对象太)为IO的处理代码:: CatHandle

正如汤姆·布劳德在这个问题上所指出的,$ * ARGFILES动态变量可能包含无效的文件句柄如果任何在命令行中提到的文件不存在。为$ * ARGFILES.handles - &...

回答 2 投票 7

© www.soinside.com 2019 - 2024. All rights reserved.