鹦鹉虚拟机/异常处理
外观
< 鹦鹉虚拟机
异常是程序中发生的错误。然而,与导致程序意外终止的普通错误不同,异常是可控的,并且可以在不重新启动程序的情况下恢复。
在 Parrot 中,异常是对象。这意味着您可以使用 new
关键字创建异常,并使用该对象的方法来操作异常。在我们进一步讨论异常之前,我们需要讨论一些术语。熟悉其他编程语言中异常的读者可能可以跳过这些定义。
- 抛出
- 抛出异常意味着创建一个异常对象。一旦创建了异常,系统就会进入一种“恐慌状态”,它会尝试修复异常。如果无法修复异常,程序将终止。
- 引发
- 引发异常与抛出异常相同。
- 处理程序
- 处理程序是可以修复异常的例程。当引发异常并且系统进入恐慌模式时,它会查找处理程序。如果有可用的处理程序,则异常将被发送到该处理程序。如果没有任何处理程序可以处理异常,系统将终止。
- 捕获
- 接收异常对象的处理程序被称为“捕获”它。每当抛出异常时,都应该有一个处理程序来捕获它。同样,如果没有任何处理程序可以捕获异常,Parrot 将退出。
- 重新抛出
- 并非所有处理程序都能够处理所有异常。如果处理程序捕获了无法修复的异常,它可以选择重新抛出该异常。重新抛出会导致系统搜索不同的处理程序。
在 PIR 中创建新的异常对象非常简单
$P0 = new 'Exception'
异常类似哈希,这意味着它们具有命名的字段。其中一个字段是 '_message'
字段,它包含异常的名称。异常处理程序将检查名称以确定它们是否可以处理特定异常,或者是否需要重新抛出它。
在 Parrot 中,处理程序是一个标签,系统在发生异常时会跳转到该标签。这些标签存储在堆栈结构中。最顶层的异常处理程序接收指令,但如果它重新抛出,异常将向下传播到异常堆栈,直到最终被处理。