本文共 1550 字,大约阅读时间需要 5 分钟。
原代码:
self.svmtrain_pathname = os.path.join(dirname, ‘../svm-train’)
修改为:self.svmtrain_pathname = os.path.join(dirname, ‘../svm-train.c’
原因分析:在异常代码出现的地方:
if rate is None: raise RuntimeError(‘get no rate’)
如果获取不到当前的rate值,就会报异常,跟踪代码路径可以发现:class LocalWorker(Worker): def run_one(self,c,g): cmdline = self.get_cmd(c,g) result = Popen(cmdline,shell=True,stdout=PIPE,stderr=PIPE,stdin=PIPE).stdout for line in result.readlines(): if str(line).find('Cross') != -1: return float(line.split()[-1][0:-1])class SSHWorker(Worker): def __init__(self,name,job_queue,result_queue,host,options): Worker.__init__(self,name,job_queue,result_queue,options) self.host = host self.cwd = os.getcwd() def run_one(self,c,g): cmdline = 'ssh -x -t -t {0} "cd {1}; {2}"'.format\ (self.host,self.cwd,self.get_cmd(c,g)) result = Popen(cmdline,shell=True,stdout=PIPE,stderr=PIPE,stdin=PIPE).stdout for line in result.readlines(): if str(line).find('Cross') != -1: return float(line.split()[-1][0:-1])
如果reslut.readlines()为空,则返回值为None,所以会报上述异常
那么再深层分析一下这个问题会发现,heart_scale或者你在windows上生成在linux中使用的训练数据,windows会自动在每一个换行处使用’\r\n’换行,而在linux中则使用’\n’换行,这样就会导致在windows下不会被当做一行进行读取的最后一行空格会在linux中当做一行处理,出现上述问题转载地址:http://cahmi.baihongyu.com/