乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 47|回复: 8

[编程交流] 错误捕获

[复制链接]

7

主题

24

帖子

17

银币

初来乍到

Rank: 1

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

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

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

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:19:05 | 显示全部楼层
本教程可能很有趣:错误处理
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 00:32:39 | 显示全部楼层
谢谢大家的帮助。我有一些想法,到目前为止,它似乎正在发挥作用。
BlackBox:您提到的默认错误处理程序可以通过某种方式访问和编辑吗?
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

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

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 00:47:05 | 显示全部楼层
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:54:50 | 显示全部楼层
This tutorial might be of interest: Error Handling
回复

使用道具 举报

7

主题

24

帖子

17

银币

初来乍到

Rank: 1

铜币
35
发表于 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?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 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
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 21:02 , Processed in 0.424381 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表