【问题标题】:Python fails silently when moving code in another file在另一个文件中移动代码时,Python 静默失败
【发布时间】: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


【解决方案1】:

好吧,我实际上非常愚蠢:

In [1]: runfile('C:/DevZone/workspaceFX/scripts4recalbox/BestArcade/fav.py', wdir='C:/DevZone/workspaceFX/scripts4recalbox/BestArcade')

我正在启动我的 fav.py 下标而不是主要的,当然它没有任何主要的......

【讨论】:

    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2020-04-26
    • 2023-01-03
    • 2023-03-20
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多