我有一個pyclips/clips程序,我使用pytest編寫了一些單元測試。 每個測試用例都會調用初始的clips.Clear()
,然後通過clips.Load(rule_file.clp)
執行實際剪輯COOL代碼。單獨運行每個測試都能正常運行CLIPS(清除)命令失敗/拋出pyclips異常
然而,當告訴pytest運行所有測試時,一些失敗,ClipsError: S03: environment could not be cleared
。實際上,它取決於.py文件中測試的順序。似乎有些測試用例會導致後續的測試用例拋出異常。
也許有些剪輯代碼仍在「使用中」,以便清除失敗? 我讀here是(clear)
清除剪輯。從CLIPS環境中移除所有結構和所有關聯的數據結構(例如事實和實例)。清晰可以在任何時候安全地執行,但是,某些構造不會在使用時被刪除。
這可能是這種情況嗎?什麼導致(clear)
命令失敗?
編輯:
我能夠縮小問題。它發生在下列情況下:
test_case_A來自test_case_B之前。 在test_case_A有一個如
(test (eq (type ?f_bio_puts) clips_FUNCTION))
但f_bio_puts
test
已被設置爲
(slot f_bio_puts (default [nil]))
所以測試一個時隙的變量,它已被設置爲[nil]
最初的類型,似乎導致(clear)
命令失敗。有任何想法嗎?
EDIT 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的一個錯誤,這是掩蓋了這個錯誤。
感謝您尋找到這加里。你的回答是否意味着剪輯中存在一個錯誤?它會在即將發佈的版本中更改嗎?或者是這樣的設計? – stackoverflowwww
這是一個錯誤。當您使用命令提示符交互式使用CLIPS時,錯誤標誌會在每個命令發出時自動重置。嵌入時,各個API調用必須重置錯誤標誌。這將在下一個版本中得到解決,但如果遇到與其他API調用有關的問題,則還可以通過重置錯誤標誌而無需額外的代碼來檢查嵌入式控制器,從而解決pyclips方面的問題。 –