Arepo 发表于 2022-7-6 00:04:04

错误捕获

你好
 
我试图获得一个全局*错误*函数,当按下ESC或ENTER键时,该函数将AutoCAD变量(clayer、cecolor等)重置为其原始状态。最初,我为每个单独的程序编写了单独的错误代码,但我注意到运行的错误代码是为加载到图形中的最后一个程序而不是我正在运行的程序编写的,因此并非所有我想要的变量都被重置,这取决于加载的最后一个程序。所以现在我试着写一个全局错误代码。我使用自动加载功能加载我的程序,我注意到,如果我第一次在图形中使用程序时按ESC键,变量不会重置(错误函数不会运行)。之后,通过手动重置变量,它工作正常,运行错误代码。我还注意到,如果我使用Load而不是Autoload来加载程序,即使是第一次,它也可以正常工作,但我不想对所有程序都使用Load。问题是:这是我第一次使用加载了自动加载功能的程序时运行错误代码的一种方法吗?
我有第二个问题:对于一些程序,我有一个不同的错误代码(删除最后一个obj),我不想为其余的程序运行。是否可以只为这几个程序编写全局代码,如果可以,如何调用它?
我希望我把我想说的说清楚。
非常感谢。

BlackBox 发表于 2022-7-6 00:12:20

我尝试了几种不同的方法来解释*错误*处理,我(在我看来)遇到的最简单的方法是只定位例程的*错误*处理程序,这样它只能临时定义为处理任何/所有引发的*错误*,当例程完成时,默认的*错误*处理程序会自动恢复。
 
下面是一个快速示例,存储、设置和恢复您上面提到的系统变量。。。同样,这只是多种方式之一:
 
大卫。

ymg3 发表于 2022-7-6 00:19:05

本教程可能很有趣:错误处理

BlackBox 发表于 2022-7-6 00:32:39

谢谢大家的帮助。我有一些想法,到目前为止,它似乎正在发挥作用。
BlackBox:您提到的默认错误处理程序可以通过某种方式访问和编辑吗?

ymg3 发表于 2022-7-6 00:38:38

 
这是不建议的。。。临时重新定义默认的*错误*处理程序的原因是在例程出错时执行自定义操作。如果默认的*错误*处理程序未正确还原,这将导致其他错误可能无法正确处理,最终可能导致致命错误(崩溃)。
 
因此,我选择本地化例程的“error”函数,因为当例程结束时,它不再被定义(即从范围中删除)。
 
我希望(更多?)感觉
 
干杯

David Bethel 发表于 2022-7-6 00:47:05

Lee Mac 发表于 2022-7-6 00:54:50

This tutorial might be of interest: Error Handling

Arepo 发表于 2022-7-6 00:59:38

Thank you everybody for help. I got a few ideas, and it looks like it's working so far.
BlackBox: can the default error handler you mentioned be accessed and edited in some way?

BlackBox 发表于 2022-7-6 01:05:34

 
That is not advised... The reason for temporarily redefining the default *error* handler, is to perform custom actions in the event of an error in your routine. If the default *error* handler is not properly restored, this will cause other errors to potentially not be handled properly, which can ultimately lead to a fatal error (crash).
 
For this reason, I choose to localize my routine's *error* function, as when the routine ends, it is no longer defined (i.e., removed from scope).
 
I hope that makes (more?) sense.
 
Cheers
页: [1]
查看完整版本: 错误捕获