前幾天因爲python給我帶來了興奮寫了一篇文章叫做《The beauty of python 1》,今天則是因爲一個小錯誤而寫下此文。
也是緣由於我的工作,問題是這樣的:
我有一個文檔,裏面存儲了一行信息
商品分類#該分類的商品數
商品分類是不會出現#(所以我保存時候用了#作爲分隔符),而商品總是從1到商品數n編號,我得到這個商品數之後,就可以遍歷調用操作函數(簡單記爲fun吧)。
理所當然拉,我設置了分隔符,當然就是爲了使用split。之後我寫了幾行這樣的代碼。
f=open('record.txt','r')
info=f.readlines()[0]
f.close()
end=info.split('#')[-1]
beg=1
while beg<=end:
fun(beg)
beg+=1
之後我就安心地交給後臺操作了
nohup python a.py &
之後我就在寫其他了,因爲處理的是海量數據,所以我等了一個下午再回去看的時候,發現程序還沒有結束,不再我預計的範圍內。
聰明的你,看出什麼問題了嗎?
後來我加入了一句很簡單的話。
f=open('record.txt','r')
info=f.readlines()[0]
f.close()
end=info.split('#')[-1]
beg=1
while beg<=end:
print beg#這句
fun(beg)
beg+=1
但是,我的數據量很大,而且fun操作時間很慢!這就糾結了!這麼簡單的結果,竟然會出錯?我毫不懷疑main函數內,而去看大段的fun,但是苦苦試驗了很多次,還是不行阿。
當時,我差點懷疑是我的py壞了,還是在逗我!(作者心急如焚,竟然會懷疑自己的編譯器!我的fun很噁心的一堆正則)
後來,我用肉眼來觀察,難道是我的split出問題了嗎?之後又加了一句。
f=open('record.txt','r')
info=f.readlines()[0]
f.close()
end=info.split('#')[-1]
print end #這句
beg=1
while beg<=end:
print beg
fun(beg)
beg+=1
end還是很正常阿!這下就煩惱了,是我的程序問題嗎,還是真的沒運行完?
Then,我去了個洗手間。
仔細一想,好像split後得到的是字符串!!字符串!
但是,字符串不是會轉換成數字嗎?那到底也不至於沒跑完阿,比如'18'(我假設而已,實際大多了。)
數字與字符串的比較呢?
後來我寫了一個測試函數
beg=1
while beg<'1':
print beg
beg+=1
死循環了。。。
我帶着一腔憤怒與興奮,修改了程序
f=open('record.txt','r')
info=f.readlines()[0]
f.close()
end=int(info.split('#')[-1])
beg=1
while beg<=end:
fun(beg)
beg+=1
程序總算是正常了。
好吧,被py玩了一個下午。
後來,我發現,用xrange會直接報錯,下次還是用xrange吧。