【问题标题】:CLIPS (clear) command fails / throws exception in pyclipsCLIPS(清除)命令失败/在 pyclips 中引发异常
【发布时间】:2017-03-25 05:37:51
【问题描述】:

我有一个 pyclips / clips 程序,我使用 pytest 为其编写了一些单元测试。 每个测试用例都包含一个初始的clips.Clear(),然后是通过clips.Load(rule_file.clp) 执行真实剪辑酷代码。单独运行每个测试都可以正常工作。

然而,当告诉 pytest 运行所有测试时,有些失败并显示ClipsError: S03: environment could not be cleared。实际上,这取决于 .py 文件中测试的顺序。似乎有测试用例导致后续测试用例抛出异常。

也许某些剪辑代码仍在“使用中”,因此清除失败? 我读到here(clear)

清除 CLIPS。从 CLIPS 环境中删除所有构造和所有关联的数据结构(例如事实和实例)。可以随时安全地执行清除,但是,某些构造在使用时不允许自己被删除。

这里可能是这种情况吗?是什么导致(clear) 命令失败?

编辑:

我能够缩小问题的范围。它发生在以下情况:

test_case_A 在 test_case_B 之前。 在 test_case_A 中有一个test 例如

(test (eq (type ?f_bio_puts) clips_FUNCTION))

f_bio_puts 已设置为

(slot f_bio_puts (default [nil]))

所以测试一个槽变量的类型,它最初被设置为[nil],似乎会导致(clear) 命令失败。有什么想法吗?

编辑 2

我想我知道是什么导致了问题。这是test 行。我调整了我的代码以使其在剪辑对话框窗口中运行。通过(batch ...) 加载时出现此错误

[INSFUN2] No such instance nil in function type.
[DRIVE1] This error occurred in the join network
   Problem resided in associated join
       Of pattern #1 in rule part_1

我猜这是被屏蔽的 pyclips 的错误。

【问题讨论】:

    标签: pytest clips pyclips


    【解决方案1】:

    更改 CLIPS 源代码construct.c 文件中的EnvClear 函数,添加以下代码行以重置错误标志:

    globle void EnvClear(
      void *theEnv)
      {
       struct callFunctionItem *theFunction;
    
       /*==============================*/
       /* Clear error flags if issued  */
       /* from an embedded controller. */
       /*==============================*/
    
       if ((EvaluationData(theEnv)->CurrentEvaluationDepth == 0) && 
           (! CommandLineData(theEnv)->EvaluatingTopLevelCommand) &&
           (EvaluationData(theEnv)->CurrentExpression == NULL))
         {
          SetEvaluationError(theEnv,FALSE);
          SetHaltExecution(theEnv,FALSE);
         }
    

    【讨论】:

    • 感谢您调查此 Gary。您的回答是否意味着剪辑中有错误?在即将到来的版本中会改变吗?还是这样设计的?
    • 这是一个错误。当您通过命令提示以交互方式使用 CLIPS 时,错误标志会随着每个命令的发出而自动重置。嵌入时,各个 API 调用必须重置错误标志。这将在下一个版本中修复,但如果您在使用其他 API 调用时遇到此问题,您也可以通过重置错误标志来修复 pyclips 端的问题,而无需额外的代码来检查嵌入式控制器。
    猜你喜欢
    • 2011-01-14
    • 2023-03-17
    • 2018-12-09
    • 2019-09-16
    • 2019-09-19
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多