当前位置: 首页 > 知识库问答 >
问题:

如何抛出Delphi无法捕获的异常?

弓嘉纳
2023-03-14

是否有可能在Delphi中构建一个代码片段,使假设的EChuckNorrisException无法捕获?

对于Java编程语言,我刚刚发现在Uncatchable ChuckNorriseException中,答案是肯定的

共有2个答案

酆景辉
2023-03-14

有时,调用应用程序的异常处理程序也不会捕获在dll中引发且未在该dll中捕获的异常。我想知道是否有可能在不使用dll的情况下模拟这种行为?

洪雅健
2023-03-14

不可以。在Delphi中,可以提出任何对象(TObjectsubstant),尽管按照惯例,这通常限于从基Exception类派生的对象。可以创建一个覆盖异常处理程序来捕获任何内容。

大多数试图以某种方式报告信息的包罗万象的异常处理程序如下所示:

try
...
except
  on E: Exception do
    ...
end;

因此,如果你提出的东西不是从Exception派生出来的,那么它将以这种方式运行,而不会被捕获。

然而,也可以这样写:

try
...
except
  ...
end;

这种类型的异常处理程序不会得到任何结果。

如果引发的异常在任何地方都未被捕获,程序将立即终止并出现错误。如果这是预期的效果,那么可以通过使用非零错误代码调用Halt来执行相同的操作。

 类似资料:
  • 我有这样的情况,即活动调用管理器类调用提供者。 活动->管理器(带有asyncTask的方法)->提供程序 我应该如何将捕获的异常发送回活动?

  • 嘿StackOverflow社区, 关于抛出异常。一般什么时候抛出和异常,什么时候抓取? 假设我遇到了这样的情况,我不得不退出,因为发生了一些问题,我无法从它中恢复过来。我是投还是接? 我现在就这么做: 这样做对吗?如果我只是抛出异常会更合适吗?对不起,我是例外的新手:)

  • 问题 你在一个 except 块中捕获了一个异常,现在想重新抛出它。 解决方案 简单的使用一个单独的 rasie 语句即可,例如: >>> def example(): ... try: ... int('N/A') ... except ValueError: ... print("Didn't work") ...

  • 问题 你想捕获一个异常后抛出另外一个不同的异常,同时还得在异常回溯中保留两个异常的信息。 解决方案 为了链接异常,使用 raise from 语句来代替简单的 raise 语句。 它会让你同时保留两个异常的信息。例如: >>> def example(): ... try: ... int('N/A') ... except ValueError as e:

  • "CATCH"应该严格地在"扔"之后叫吗?" 例1: 错误: 找不到方法“接收器”:没有方法缓存,也没有^在/tmp/739536251/main块中查找_方法。pl6第11行 例2: 无误

  • 我有以下2个代码片段,我想知道是什么使java编译器(在Eclipse与Java7)显示错误的第二个片段,为什么不是第一个。 以下是代码片段: 片段1 片段2 在eclipse中,snippet1显示为finally块添加'SuppressWarning',但在snippet2中,它显示为catch块中的throw语句添加'throws或try catch'块。 我详细研究了以下问题,但没有提供任