CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoLISP 开发指南

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

2023-1-6 12:58| 发布者: admin| 查看: 925| 评论: 0|来自: AutoCAD

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

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

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

下面定义了一个名为 catch-me-if-you-can 的函数。此函数接受两个数字参数,并用于将第一个数字除以第二个数字。该函数确定返回值 from 是否为错误对象。如果返回值是错误对象,则 catch-me-if-you-can-invokess 从错误对象获取消息。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 上受支持。

路过

雷人

握手

鲜花

鸡蛋

最新评论

AutoCAD Moldflow UG MoldWizard模具开发4合1

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

GMT+8, 2024-5-7 01:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部