CLIPS(清除)命令失败/在 pyclips 中抛出异常
CLIPS (clear) command fails / throws exception in pyclips
我有一个 pyclips / clips 程序,我使用 pytest 为其编写了一些单元测试。
每个测试用例都包含一个初始 clips.Clear()
,然后通过 clips.Load(rule_file.clp)
执行真实的剪辑 COOL 代码。 运行 每个测试都可以正常工作。
然而,当告诉 pytest 运行 所有测试时,有些测试失败 ClipsError: S03: environment could not be cleared
。实际上,这取决于 .py 文件中测试的顺序。似乎有测试用例,导致后续测试用例抛出异常。
可能有些片段代码还是"in use"导致清零失败?
我读 here (clear)
Clears CLIPS. Removes all constructs and all associated data structures (such as facts and instances) from the CLIPS environment. A clear may be performed safely at any time, however, certain constructs will not allow themselves to be deleted while they are in use.
这里会不会是这种情况?是什么导致 (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
行。我修改了我的代码,使其在剪辑对话框 Windows 中成为 运行。通过 (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的一个bug,被屏蔽了。
更改 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);
}
我有一个 pyclips / clips 程序,我使用 pytest 为其编写了一些单元测试。
每个测试用例都包含一个初始 clips.Clear()
,然后通过 clips.Load(rule_file.clp)
执行真实的剪辑 COOL 代码。 运行 每个测试都可以正常工作。
然而,当告诉 pytest 运行 所有测试时,有些测试失败 ClipsError: S03: environment could not be cleared
。实际上,这取决于 .py 文件中测试的顺序。似乎有测试用例,导致后续测试用例抛出异常。
可能有些片段代码还是"in use"导致清零失败?
我读 here (clear)
Clears CLIPS. Removes all constructs and all associated data structures (such as facts and instances) from the CLIPS environment. A clear may be performed safely at any time, however, certain constructs will not allow themselves to be deleted while they are in use.
这里会不会是这种情况?是什么导致 (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
行。我修改了我的代码,使其在剪辑对话框 Windows 中成为 运行。通过 (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的一个bug,被屏蔽了。
更改 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);
}