0

我发现了 SikuliX + Python 的一个奇怪行为。我的主应用程序运行没有任何问题...但是如果我对导入的模块进行任何更改,我就会出错

NameError:名称“myLib”未定义

如果我重新启动我的 SikuliX 程序,一切都会再次正常...这是非常令人讨厌的错误..我不知道如何处理..我将更详细地描述我的情况:

..................................................... .....................

我的 sikulix 项目有文件夹:

C:\project\ 

我有主应用程序的文件夹:

C:\project\application.sikuli

我的模块有文件夹:(我正在导入到主应用程序)

C:\project\myLib.sikuli

我的模块 myLib 的内容:

from sikuli import *

def myFunc1():
    print(" myFunc1 ")

我的主要应用程序的内容:

import sys
sys.path.append("C:\project\myLib.sikuli")
from myLib import *

myFunc1()

..................................................... .....................

  • 如果我运行主应用程序,则会打印“myFunc1”。一切正常,没有任何问题。
  • 如果我运行我的模块 myLib,什么也不会发生。一切正常,没有任何问题。

  • 如果我在 myLib 模块中进行了任何不相关的更改(例如,文件末尾的新行)我得到错误:

Traceback (most recent call last):
  File '<string>', line 1, in <module>
NameError: name 'myLib' is not defined
[error] IDE: Run Script: internal error:

如果我运行主应用程序以及尝试运行 myLib,我会收到此错误。

  • 如果我重新启动我的 SikuliX,一切都会再次正常... myLib 末尾的新行不再是问题。

它看起来是 SikuliX 的一些内部错误,但我对 SikuliX 不是很有经验,所以我将非常感谢您对此行为的意见。

谢谢!

4

1 回答 1

0

我从RaiMan ( https://github.com/RaiMan ) 那里得到了解决方案:

这是正常行为,因为 IDE 只有 Jython 解释器的静态上下文(在同一 IDE 会话中重新启动脚本时不会完全重置,以节省几秒钟的启动时间)。

文档中的一些注释在 Python 导入的一般规则的一些评论部分中有一个注释

在你的情况下使用:

import myLib
from myLib import *

而不仅仅是

from myLib import *

应该有助于在脚本重新运行时触发重新加载。

于 2020-01-29T21:34:24.647 回答