Python!Are you kidding me?

前幾天因爲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吧。




發佈了123 篇原創文章 · 獲贊 10 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章