1. 程式人生 > >Python!Are you kidding me?

Python!Are you kidding me?

get 編譯器 adl 多次 -a readlines 錯誤 真的 工作

前幾天由於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 &

之後我就在寫其它了,由於處理的是海量數據。所以我等了一個下午再回去看的時候。發現程序還沒有結束。不再我估計的範圍內。

聰明的你,看出什麽問題了嗎?

後來我增加了一句非常easy的話。

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吧。




Python!Are you kidding me?