当前位置: 首页 > 面试题库 >

当我提出自己的异常作为响应时,如何更轻松地抑制以前的异常?

苏浩瀚
2023-03-14
问题内容

考虑

try:
   import someProprietaryModule
except ImportError:
   raise ImportError('It appears that <someProprietaryModule> is not installed...')

运行时,如果未安装someProprietaryModule,则会看到:

(traceback data)
ImportError: unknown module: someProprietaryModule

During handling of the above exception, another exception occurred:

(traceback data)
ImportError: It appears that <someProprietaryModule> is not installed...

也许我不希望出现“在处理以上异常…期间”行(及其上方的行)。我可以这样做:

_moduleInstalled = True
try:
   import someProprietaryModule
except ImportError:
   _moduleInstalled = False
if not _moduleInstalled: 
   raise ImportError('It appears that <someProprietaryModule> is not installed...')

但这感觉有点像黑客。我还能做什么?


问题答案:

在Python 3.3及更高版本中,raise ... from None可能会出现这种情况。

try:
   import someProprietaryModule
except ImportError:
   raise ImportError('It appears that <someProprietaryModule> is not installed...') from None

这具有期望的结果。



 类似资料:
  • 我在Java中使用Jersey 1.14进行REST。如果资源的POST正文中有任何错误,Jersey将抛出和异常,该异常向客户端提及我的内部类。我仍然希望在错误从我的应用程序传递时给他们错误,但是抑制Jersey抛出的错误(对于甚至没有到达我的应用程序的请求,因为Jersey标识了异常并抛出它)。我搜索了任何标志来实现这一点,但没有找到任何东西。有办法做到这一点吗? 编辑:重新表述问题:静音/抑

  • 本文向大家介绍轻松学习C#的异常处理,包括了轻松学习C#的异常处理的使用技巧和注意事项,需要的朋友参考一下        异常是程序运行中发生的错误,异常处理是程序设计的一部分。错误的出现并不总是编写应用程序者的原因,有时候应用程序会因为终端用户的操作发生错误。无论如何,在编写程序前,都应该预测应用程序和代码中出现的错误。一般良好的编程规范也会避免一些不必要的程序错误的出现。         在项

  • 问题内容: 我有以下代码 当我使用没有权限的用户时,我得到的不是。 问题答案: 是一个已检查的异常,但它是从未在其子句中声明的方法抛出的(实际上是从拦截该方法的方面)。这是Java中的异常情况,因此您的异常用包裹了,并且未经检查。 要按原样获取您的异常,您可以在方面所拦截的方法的子句中声明它,也可以使用另一个未经检查的异常(即的子类)代替。

  • 问题内容: 我有这样的方法: 我想抛出一个内。编译器不允许我这样做,因为不允许将我的方法扔在那里。但是我需要抛出一个的子类来进行测试 (我不能抛出Unchecked)。显然这是一个hack,但我需要进行测试。我尝试过EasyMock,但它也不允许我这样做。任何想法如何做到这一点? 谢谢,肖恩·阮 问题答案: 方法1: Alexey Ragozin的这篇文章介绍了如何使用泛型技巧引发未声明的检查异常

  • 在你可以捕获异常之前,一些代码必须抛出一个异常。任何代码都可能会抛出异常:您的代码,来自其他人编写的包(例如Java平台附带的包)或Java运行时环境的代码。无论是什么引发的异常,它总是通过 throw 语句抛出。 您可能已经注意到,Java平台提供了许多异常类。所有类都是Throwable类的后代,并且都允许程序区分在程序执行期间可能发生的各种类型的异常。 您还可以创建自己的异常类来表示在您编写

  • 问题内容: 与使用java.lang.Exception相比,您将在什么时候创建自己的异常类?(一直吗?仅在包外使用吗?仅当它必须包含高级逻辑时?等) 问题答案: 我认为您需要问自己一个完全不同的问题:“创建新异常给我或使用我的代码的开发人员有什么优势?” 实际上,它给您或其他人带来的唯一好处就是能够处理异常。这似乎是一个显而易见的答案,但实际上并非如此。您应该只处理可以合理恢复的异常。如果您抛出