我正在使用python从.xlsm excel文件中读取数据。我有两个几乎相同的文件,并保存在同一目录中。当我给python程序一个excel表时,它正确读取数据并解决问题。但是,使用其他Excel工作表我会收到以下错误。
(我用####封锁了我的名字)
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
我不知道什么“”Pulp:执行“+ 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。那个bempmpSol怎么能同时具有相同的价值呢?
答案 0 :(得分:1)
使用进程ID创建名称,如果您有某种批处理作业从一个进程启动两个求解器应用程序,那么它们将具有相同的名称。
答案 1 :(得分: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
干杯, 添