CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2021 开发者帮助

使用 vl-catch-all-apply (AutoLISP) 捕获错误

2024-5-18 18:28| 发布者: admin| 查看: 47| 评论: 0|原作者: admin|来自: AutoCAD

使用 vl-catch-all-apply (AutoLISP) 捕获错误

AutoLISP 函数导致的错误可能导致程序意外结束,请确保处理可能导致错误的所有已知情况。

  1. 用 包装每个可能引发错误的函数。vl-catch-all-apply
  2. 计算 with 返回的值,以查看是否返回了错误对象或值。vl-catch-all-applyvl-catch-all-error-p
  3. 用于获取与返回的错误对象关联的消息。vl-catch-all-error-message
  4. 加载、运行和测试代码。

下面定义了一个名为 catch-me-if-you-can 的函数。此函数接受两个数字参数,并用于将第一个数字除以第二个数字。该函数确定返回值是否为错误对象。如果返回值是错误对象,则调用 catch-me-if-you-can 从错误对象获取消息。vl-catch-all-applyvl-catch-all-error-pvl-catch-all-applyvl-catch-all-error-message

  1. 在AutoCAD命令提示符下,输入以下代码:
    (defun catch-me-if-you-can (dividend divisor / errobj)
      (setq errobj (vl-catch-all-apply '/ (list dividend divisor)))
      (if (vl-catch-all-error-p errobj)
        (progn
          (print (strcat "An error occurred: " (vl-catch-all-error-message errobj)))
          (initget "Yes No")
          (setq ans (getkword "Do you want to continue? [Y/N]: "))
          (if (equal (strcase ans) "YES")
            (print "Okay, I'll keep going")
          )
        )
        (print errobj)
      )
     (princ)
    )
    注意:您还可以将示例代码添加到现有文件或创建新的 LSP 文件。然后使用 APPLOAD 命令加载 LSP 文件。
  2. 输入以下代码:
    (catch-me-if-you-can 50 2)

    该函数返回 25。

  3. 输入以下代码:
    (catch-me-if-you-can 50 0)

    该函数发出以下提示:

    “发生错误:除以零” 是否要继续?[是/否]:

    如果输入 y(或 yes),catch-me-if-you-can 表示它将继续处理。尝试通过更改为 来修改此示例。再次加载并运行除以零的示例。当应用导致错误时,执行会立即停止并调用 *error*,从而导致错误消息。vl-catch-all-applyapply

    当您将 ActiveX 与 AutoLISP 一起使用时,这些函数尤为重要。许多 AutoCAD ActiveX 自动化方法都设计为以“异常编程”样式使用。这意味着它们要么在成功时返回有用的值,要么在失败时引发异常(而不是返回错误值)。如果程序使用 ActiveX 方法,则必须准备它以捕获异常,否则程序将停止,使用户处于命令提示符下。vl-catch-*

    注意:ActiveX 函数仅在 Windows 上受支持。

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2024-12-15 13:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部