這是 「PyCharm 技巧分享」系列的第二篇分享。由於上一篇文章得到了大家的一些贊同,所以今天又來給大家推薦一些我平時自己有用的小技巧,大家擇需所取即可。
先宣告下,並不保證對所有的人都是有幫助的,所以請大神嘴下留情,覺得有用的朋友,還請給個贊,證明這系列有人在看,有人在看那我就有更多的動力繼續更新,你說是不是呢?
如果你沒看過第一篇文章,你可以點選這裡進行檢視: 每週分享五個 PyCharm 使用技巧(一)
06. 神一樣的除錯技巧
假如我們在一個爬蟲的專案中,會使用到 正規表示式 來匹配我們想要抓取的內容。正則這種東西,有幾個人能夠一步到位的呢,通常都需要經過很多次的除錯才能按預期匹配。在我們改了一次正則後,執行了下,需要重新向網站抓取請求,才能發現沒有匹配上,然後又改了一版,再次執行同樣需要發起請求,結果還是發現還是沒有匹配上,往往復復,正則不好的同學可能要進行幾十次的嘗試。
(上面這個例子可能不太貼切,畢竟是有很多種方法實現不用重新發請求,只是列舉了一種很笨拙且低效的除錯過程,你看看就好了)
而我們在這幾十次的除錯中,向同一網站發起請求都是沒有意義的重複工作。如果在 Pycharm 中可以像 IPython Shell 和 Jupyter Notebook 那樣,可以記住執行後所有的變數資訊,那我們就可以在打了斷點後,可以在不需要重新執行專案或指令碼,就可以通過執行命令表示式,來調整我們的程式碼,進行我們的正則除錯。
答案當然是有。
假如我在除錯如下幾行簡單的程式碼。在第 3 行處打了個斷點。然後點選圖示位置 Show Python Prompt
按鈕。
就進入了 Python Shell
的介面,這個Shell 環境和我們當前執行的程式環境是打通的,變數之間可以互相訪問,這下你可以輕鬆地進行除錯了。
上面我們打了個斷點,是為了方便說明這個效果。並不是說一定要打斷點。如果不打斷點,在指令碼執行完成後,也仍然可以在這個介面檢視並操作所有變數。
現在我們已經可以滿足我們的除錯的需求,但是每次執行指令碼,都要手動點選 Show Python Prompt
,有點麻煩。嗯?其實這個有地方可以設定預設開啟的。這個開關還比較隱祕,一般人還真發現不了。
你需要點選圖示位置 Edit Configurations
處。
然後在這裡打勾選中。
設定上之後,之後你每次執行後指令碼後,都會預設為你儲存所有變數的值,併為你開啟 console 命令列除錯介面。
除了上面這種方法,其實還有一種方法可以在除錯過程中,執行命令表示式,而這種大家可能比較熟悉了,這邊也提一下,就當是彙總一下。但是從功能上來說,是沒有上面這種方法來得方便易用的。因為這種方法,必須要求你使用 debug 模式執行專案,並打斷點。
使用方法就是,在你打了斷點後,在圖示位置處,點選右鍵使用 Evaluate Expression
就彈出了一個 Evaluate Expression
視窗,這裡 可以執行命令表示式,直接操作變數。
07. 指定引數執行指令碼
你在 Pycharm 執行你的專案,通常是怎麼執行的?我的做法是,右鍵,然後點選 Run
,或者使用快捷鍵 Shift + F10
。
有時候,在執行/除錯指令碼的時候,我們需要指定一些引數,這在命令列中,直接指定即可。
假設在命令列中,執行指令碼的命令是這樣
python main.py init --local
複製程式碼
對於剛使用 Pycharm 的同學,可能並不知道 Pycharm 也是可以指定引數的。點選下圖位置
進入設定皮膚,在 Script parameters
中填入引數即可。
同時在上圖的底部,你可以看到,這裡可以很方便的切換 直譯器,比你跑到這邊來要容易得多吧
08. 搜尋時過濾測試檔案
接下來,介紹一個,我看框架原始碼的時的一個小技巧,可能只適用一小部分人吧。
我平時會看的框架是 OpenStack ,我不知道其他框架是怎樣的,但在 OpenStack 裡面帶有大量(真的很多)的單元測試檔案。這給我在使用 Find in Path
時帶來了不小的困擾,你可以從下圖的搜尋結果中感受一下,搜尋一個函式,test 檔案裡的結果比 正常檔案要多很多。
這些測試檔案的搜尋結果,對於我們看原始碼不僅沒有任何幫助的,更重要的是還干擾視線。於是我就研究了一下,從檔名入手,只要在 File mask
裡填寫 !test*
可以將這些test檔案過濾掉。搜尋結果一下子清晰很多。
09. 關閉煩人的燈泡提示
本來沒有想寫這個的,但是知乎上有一位朋友有這個需求,那我研究了下。
先來說下這個燈泡提示是什麼,有什麼用?
當我們在程式碼裡面有語法錯誤,或者程式碼編寫不符合 pep8 程式碼規範時,滑鼠選擇有問題的程式碼,就會自動彈出小燈泡,這個燈泡是有顏色之分的,如果是紅燈泡,一般都是語法問題,如果不處理會影響程式碼執行。而如果是黃燈泡,就只是一個提示,提示你程式碼不規範等,並不會影響程式的執行。
雖然這個燈泡,是出於善意之舉,但我認為它確實有點多餘(可能是我個人沒有使用它的習慣),要是語法錯誤會有紅色波浪線提示。你可能會說燈泡不僅起到提示的作用,它還可以自動糾正程式碼,我個人感覺並沒有人工校正來得效率,來得精準。
基於有時還會像知乎上這個朋友說的這樣,會擋住我們的程式碼,會經常誤點,這確實也是一個煩惱。
我研究了下,Pycharm (2018版本)裡是有開關按鈕的,將下圖中的這個選項(Show intention bulb
)取消勾選,就可以關閉這個功能。
10. 關閉礙眼的波浪線
下面我先給出了一小段程式碼示例,思考一下,為什麼name,my_name 不會有波浪線,而 myname 和 wangbm 會有波浪線呢?
Pycharm 本身會實時地對變數名進行檢查,如果變數名不是一個已存在的英文單詞,就會出現一條波浪線,當一個變數裡有多個單詞時,Python 推薦的寫法是用下劃線來分隔(其他語言可能會習慣使用駝峰式命名法
,但 Python 是使用下劃線),所以在 Pycharm 看來 my_name 是規範的,而 myname 會被當成是一個單詞對待,由於它在單詞庫裡並沒有它,所以 myname 是不規範的。
每個人的變數命名習慣不一樣,如何你在專案裡大量使用了 myname 這種風格的變數命名方法,像下面這樣(隨便找了一段 cloudinit 的程式碼),是讓人挺不舒服的,總有一種程式碼有 bug 的錯覺。
那麼如何關閉這個非語法級別的波浪線呢?很簡單,它的開關就在你的右下角那個像 人頭像 一樣的按鈕
然後選擇 Syntax
級別的即可。同樣一段程式碼,效果如下,乾淨了很多。
本週的 PyCharm 使用技巧,就是這五個了,你學會了嗎?
最後,我可以求個贊嗎? *^_^*