2014-02-10 76 views
2

我正在使用python从.xlsm excel文件读取数据。我有两个几乎相同的文件并保存在同一个目录中。当我给python程序一张excel表时,它正确地读取数据并解决问题。但是,与其他Excel表格中,我收到以下错误。纸浆错误+ self.path

(我阻挡了我的名字与####)

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    solve("updated_excel.xlsm") 
    File "C:\Documents and Settings\#####\My Documents\GlockNew.py", line 111, in solve 
    prob.solve() 
    File "C:\Python27\lib\site-packages\pulp-1.5.4-py2.7.egg\pulp\pulp.py", line 1614, in solve 
    status = solver.actualSolve(self, **kwargs) 
    File "C:\Python27\lib\site-packages\pulp-1.5.4-py2.7.egg\pulp\solvers.py", line 1276, in actualSolve 
    return self.solve_CBC(lp, **kwargs) 
    File "C:\Python27\lib\site-packages\pulp-1.5.4-py2.7.egg\pulp\solvers.py", line 1343, in solve_CBC 
    raise PulpSolverError, "Pulp: Error while executing "+self.path 
PulpSolverError: Pulp: Error while executing C:\Python27\lib\site-packages\pulp-1.5.4-py2.7.egg\pulp\solverdir\cbc.exe 

我不知道是什么“”低俗:执行错误“+ self.path”的意思,但两个文件都存储在相同的目录,并且只有当我尝试解决问题时才会出现问题。有没有人有什么可能触发这样的错误的想法?

编辑

进一步调试后,我发现错误在于在COIN_CMD类的solve_CBC方法。发生错误的位置:

if not os.path.exists(tmpSol): 
    raise PulpSolverError, "Pulp: Error while executing "+self.path 

当运行两个Excel工作表,它们具有相同的值tmpSol求解器:4528-pulp.sol

然而,当我运行它用于一个excel表OS .path.exists(tmpSol)返回true,另一个返回false。这两种方法如何能同时具有相同的值?

回答

1

该名称是使用进程ID创建的,如果您有某种批处理作业从一个进程启动两个求解器应用程序,则它们将具有相同的名称。

0

启动LPSolver类的多个实例时遇到同样的问题。该问题是由纸浆的solvers.py文件中的以下几行代码引起的:

pid = os.getpid() 
tmpLp = os.path.join(self.tmpDir, "%d-pulp.lp" % pid) 
tmpMps = os.path.join(self.tmpDir, "%d-pulp.mps" % pid) 
tmpSol = os.path.join(self.tmpDir, "%d-pulp.sol" % pid) 

出现在每个求解器中。问题是稍后会删除这些路径,但可能与LPSolver类的不同实例一致(因为变量pid不唯一)。

解决的办法是为每个LPSolver实例获取一个唯一路径,例如使用当前时间。以下四条替换上面的行将会做到这一点。

currentTime = time() 
tmpLp = os.path.join(self.tmpDir, "%f3-pulp.lp" % currentTime) 
tmpMps = os.path.join(self.tmpDir, "%f3-pulp.mps" % currentTime) 
tmpSol = os.path.join(self.tmpDir, "%f3-pulp.sol" % currentTime) 

不要忘记

from time import time 

干杯, 添

相关问题