關於在Windows作業系統下除錯本書第二十章專案1的一些討論
在討論的開始,我想先申明我的基本觀點:我並非想要吹毛求疵,只是本著讓本書能夠精益求精的,和希望能盡綿薄之力幫助他人的態度和大家一起討論。所以大家如有想法,歡迎評論或者發私信給我。
當一本技術型別書籍的讀者試圖從書中學習一些知識,並完全按照書中所說的做了,卻得不到想要的結果時,讀者的內心必是不滿或者崩潰的。這樣會降低一本書的可信度,並且降低讀者對這本書的忠誠度。我也是通過這本書入門python的,書中內容讀起來輕快有趣,且知識的介紹對新手極其友好。我是本書的讀者,我亦覺得,即使書中有一些不置可否的瑕疵,本書也不失為一本好書,並對作者的python造詣敬畏有加(當以一本好書也離不開譯者的功勞)。我也想把本書推薦給更多人,讓本書擁有更多的讀者,所以我覺得本書應精益求精,不應讓書中小小瑕疵將潛在的粉絲拒之門外。
先來說一說關於程式碼清單20-6的一些小瑕疵。
想必許多新手讀者和我一樣,當按照書上辛辛苦苦鍵入了20-4、5、6程式碼清單的程式碼並儲存後,再按照書上所說的鍵入命令列引數後,命令列會提示如下錯誤:
回讀markup.py可以發現,Parser類的內建方法def parse(self, file):及其方法內的程式碼塊都缺少一個標準縮排(4個空格符),將程式碼清單20-6的21-31行都新增一個標準縮排即可解決。
再進行一次相同的命令列操作後,命令列沒有報錯,但開啟生成的html檔案會發現,對於test_input.txt對應的每個文字塊都被顯示了3次。這個問題的根源相對比較隱蔽。仔細校對了清單20-6和生成的test_output.html的原始碼後,發現清單20-6第26-30行都多了一個標準縮排,多餘的縮排讓for rule in self.rules迴圈巢狀在for filter in filters中,故每次檢查rule的時候,都要遍歷filters中的3個filter物件,所以才造成了文字塊被新增3次的現象。要解決問題將多餘的縮排刪除即可。
講到這,我說的問題都本可以提交到勘誤裡,但我為何偏要拙書獻醜呢。其一是當我發現這些問題時,已有相應的勘誤。其二,也是最重要的,我想對於在windows作業系統下測試此專案的讀者給出一些幫助,而這是不能在勘誤裡提及的。
windows是許多新手學者常用的系統(我也如此)。但在windows命令列下鍵入書上所示的命令列引數'python markup.py < text_input.txt > test_output.html'發現根本不管用,別說讓程式按著自己的意思走,就連開始執行程式都是無稽之談(本人沒用過Linux/UNIX OS系統,所以不知在那樣的系統下是否會有此煩惱)。但不管在什麼平臺下,該命令引數意在指出,以test_input.txt作為markup.py的標準輸出,以test_output.html作為markup.py的標準輸出。故在簡單查閱了一些與windows命令列操作有關的記錄後,提出了一個替代方案可以解決該問題。方案如下:
1.在模組handlers開頭新增一行語句: import sys,並將模組handlers下HTMLRenderer類中所有方法內的: print(something),全部改為 print(something, file=open(sys.argv[1], 'a'))
2.將命令列引數'python markup.py < text_input.txt > test_output.html'改為: ' type test_input.txt | python markup.py test_output.html'
現在對於在Windows作業系統下測試專案1的讀者來說,應該能正確地生成相應的.html檔案了。但是如果在Linux/UNIX os系統下鍵入書中命令列有問題的讀者,可以參考本文,但本文不能提供任何相應的解決方法。
可以看的出來,本書所示的所有命令列引數的程式碼,都是基於Linux/UNIX OS系統的。所以希望作者能在本書中能增加一些針對於不同作業系統平臺下讀者的註釋,這定能提高本書的普適性,增加更多不同平臺下的讀者!
最後想說一點心得。學習python基礎教程半月有餘,第一次跟著書本開始嘗試開發專案便遇到了不小的困難(本文上述皆是),對於一個新手來說都是不小的挑戰,但所幸我堅持了下來。我也希望各位希望學到東西的讀者能堅持下來。在本次專案開發中,對於除錯與改錯,我總結了一個對於新手來說比較有用的技巧:當你遇到編譯/直譯器報錯,輸出結果與預期不符等問題時,嘗試以編譯/直譯器如何執行程式碼的思路來查詢解決這些問題。當然,大牛可能會對這個技巧嗤之以鼻--編譯/解釋程式碼是編譯/直譯器的事,學程式設計本就是問了省卻這些麻煩,而如今你卻將之歸結為技巧。這是對的!但對於新手來說,這確實在排錯時有作用,並且有助於新手理解更底層事。
我希望交到更多的朋友,歡迎大家一起討論!
相關文章
- 關於資料庫作業系統的討論資料庫作業系統
- 對《windows作業系統原理》一書的評論 (轉)Windows作業系統
- 關於專案經理的討論 (轉)
- 作業系統1—作業系統概論(上)作業系統
- 作業系統2—作業系統概論(下)作業系統
- 學習作業系統的三本書作業系統
- 作業系統導論(1)作業系統
- 關於UI的一次討論——來自專案管理群的討論UI專案管理
- 關於在web project專案中的程式碼重用問題討論WebProject
- Linux-0.11系統在Windows平臺下的除錯LinuxWindows除錯
- windows 作業系統映象下載Windows作業系統
- 關於ora_pz程式的一些討論
- Oracle在Windows Server下實現作業系統驗證OracleWindowsServer作業系統
- Windows作業系統是“本國貨物”嗎?Windows作業系統
- 解密《一個作業系統的實現》這本書解密作業系統
- 獲取windows 作業系統下的硬體或作業系統資訊等Windows作業系統
- 關於Linux作業系統下檔案特殊許可權的解釋Linux作業系統
- 關於撲克牌的一些討論——《Fluent Python 2》讀書筆記Python筆記
- Windows作業系統下檔案大小限制(不斷更新)Windows作業系統
- Python在Windows系統下基於Scrapyd部署爬蟲專案(本地部署)PythonWindows爬蟲
- 在Windows中檢視作業系統的uptimeWindows作業系統
- 作業系統(1)——作業系統概述作業系統
- Windows作業系統Windows作業系統
- 關於檔案寫入的原子性討論
- BPI-M4 Berry在windows系統下連線串列埠除錯Windows串列埠除錯
- 關於在Linux作業系統下校園網 瑞捷的認證(xrgsu)(轉)Linux作業系統
- 關於oracle SCN 的討論Oracle
- 關於PHP中的警告資訊和session的一些討論PHPSession
- 計算機作業系統|作業系統引論計算機作業系統
- 網友對國產作業系統的一些議論(轉)作業系統
- [技術討論]關於低耦合開發的討論
- 基於S32K144晶片除錯ucos作業系統bugS3晶片除錯作業系統
- 關於jive開發論壇的一些討論-winCVS安裝(整理)
- Windows作業系統教程Windows作業系統
- 關於雲流化系統-實時雲渲染延時性的討論
- 對於程式設計師職業生涯的一些討論程式設計師
- [討論]IT專案經理需要很專業的IT知識嗎
- 驅除煩惱 Windows作業系統查疑解惑(轉)Windows作業系統