【发布时间】:2018-12-09 06:55:35
【问题描述】:
我对 python 很陌生,我有一个奇怪的问题,我自己无法理解,我敢肯定这很愚蠢,但我可以看到它是什么,以前从未遇到过,即使有几个接线包含大量子文件的 python 脚本
为了记录,我正在 Windows 上使用 Spyder(Python 3.6 版本)编写和启动我的脚本,但我在每个文件的开头设置了 #!/usr/lib/python2.7/
我的主脚本是一个大文件,我想通过在其他文件中外部化代码来重构它
主要是这样的:
if __name__ == "__main__":
configuration = Conf.loadConf(os.path.join(scriptDir,confFile))
print(configuration)
loadFavs(configuration,bioses,setDict)
当 loadFavs 在主脚本中时,一切正常
只要我将它移动到与我的主脚本相同级别的 fav.py 文件中,添加 import fav 并修改 fav.loadFavs(configuration,bioses,setDict) 它就会停止工作,Spyder 只是没有任何理由地说什么:
In [1]: runfile('C:/DevZone/workspaceFX/scripts4recalbox/BestArcade/fav.py', wdir='C:/DevZone/workspaceFX/scripts4recalbox/BestArcade')
In [2] runfile('C:/DevZone/workspaceFX/scripts4recalbox/BestArcade/fav.py', wdir='C:/DevZone/workspaceFX/scripts4recalbox/BestArcade')
第一行 configuration = Conf.loadConf(os.path.join(scriptDir,confFile)) 应该在屏幕上打印东西,但它甚至不显示
只要我将代码放回主脚本中,我的代码就会再次运行
我尝试将脚本的几个不同部分放入不同的文件中会发生这种情况
我在这里不知所措,我检查了什么:
-
在每个文件的开头
#!/usr/lib/python2.7/
# -- 编码:utf-8 --
始终以空行结束脚本
在 Spyder 内部而不是外部创建每个文件
我不认为我移动的代码是问题,它在主脚本中运行良好,我遇到了几段代码的问题,但这里是:
def parseSetFile(setFile, setDict) :
file = open(setFile,'r')
genre = None
# Parse iniFile in iniFile dir
for line in file.readlines() :
line = line.rstrip('\n\r ')
if (line.startswith('[') and not line == '[FOLDER_SETTINGS]' and not line == '[ROOT_FOLDER]') :
genre = line
if genre not in setDict :
setDict[genre] = []
else :
if (genre is not None and not line == '' ) :
setDict[genre].append(line)
def loadFavs(configuration, bioses, setDict) :
print("Load favs small set")
parseSetFile(os.path.join(configuration['scriptDir'],dataDir,smallSetFile),setDict)
print("Load favs big set")
parseSetFile(os.path.join(configuration['scriptDir'],dataDir,bigSetFile),setDict)
print('Nb Genre : %s' %len(setDict))
sumGames = 0
for key in setDict.keys() :
# print(key)
# print(setDict[key])
sumGames = sumGames + len(setDict[key])
print('Nb Games : %s' %sumGames)
print('Nb Bios : %s' %len(bioses))
【问题讨论】:
-
不熟悉 Spyder 但目录名无效shebang
-
shebang 将被 python/spyder 忽略,并且 shebang 通常仅适用于类 Linux 系统。这应该不是问题。不过你应该更喜欢
/usr/bin/env python。 -
你可以移动文件,在主文件中插入
import fav并运行print(dir(fav))吗?这应该打印fav模块中定义的函数。这应该有助于调试此问题。 -
@meisterluk 这就是我得到的,一切似乎都已定义:['builtins', 'cached', 'doc ', 'file', 'loader', 'name', 'package', 'spec', 'bigSetFile', 'dataDir', 'loadFavs', 'os', 'parseSetFile', 'smallSetFile']
-
好吧,我实际上非常愚蠢:在 [1] 中:runfile('C:/DevZone/workspaceFX/scripts4recalbox/BestArcade/fav.py', wdir='C:/DevZone/workspaceFX/ scripts4recalbox/BestArcade'),我正在启动我的 fav.py 下标而不是主要的,当然它没有任何主要的......
标签: python python-2.7 spyder