每週分享五個 PyCharm 使用技巧(二)

Python程式設計時光發表於2019-03-31

這是 「PyCharm 技巧分享」系列的第二篇分享。由於上一篇文章得到了大家的一些贊同,所以今天又來給大家推薦一些我平時自己有用的小技巧,大家擇需所取即可。

先宣告下,並不保證對所有的人都是有幫助的,所以請大神嘴下留情,覺得有用的朋友,還請給個贊,證明這系列有人在看,有人在看那我就有更多的動力繼續更新,你說是不是呢?

如果你沒看過第一篇文章,你可以點選這裡進行檢視: 每週分享五個 PyCharm 使用技巧(一)

06. 神一樣的除錯技巧

假如我們在一個爬蟲的專案中,會使用到 正規表示式 來匹配我們想要抓取的內容。正則這種東西,有幾個人能夠一步到位的呢,通常都需要經過很多次的除錯才能按預期匹配。在我們改了一次正則後,執行了下,需要重新向網站抓取請求,才能發現沒有匹配上,然後又改了一版,再次執行同樣需要發起請求,結果還是發現還是沒有匹配上,往往復復,正則不好的同學可能要進行幾十次的嘗試。

(上面這個例子可能不太貼切,畢竟是有很多種方法實現不用重新發請求,只是列舉了一種很笨拙且低效的除錯過程,你看看就好了)

而我們在這幾十次的除錯中,向同一網站發起請求都是沒有意義的重複工作。如果在 Pycharm 中可以像 IPython Shell 和 Jupyter Notebook 那樣,可以記住執行後所有的變數資訊,那我們就可以在打了斷點後,可以在不需要重新執行專案或指令碼,就可以通過執行命令表示式,來調整我們的程式碼,進行我們的正則除錯。

答案當然是有。

假如我在除錯如下幾行簡單的程式碼。在第 3 行處打了個斷點。然後點選圖示位置 Show Python Prompt 按鈕。

每週分享五個 PyCharm 使用技巧(二)

就進入了 Python Shell 的介面,這個Shell 環境和我們當前執行的程式環境是打通的,變數之間可以互相訪問,這下你可以輕鬆地進行除錯了。

每週分享五個 PyCharm 使用技巧(二)

上面我們打了個斷點,是為了方便說明這個效果。並不是說一定要打斷點。如果不打斷點,在指令碼執行完成後,也仍然可以在這個介面檢視並操作所有變數。

每週分享五個 PyCharm 使用技巧(二)

現在我們已經可以滿足我們的除錯的需求,但是每次執行指令碼,都要手動點選 Show Python Prompt ,有點麻煩。嗯?其實這個有地方可以設定預設開啟的。這個開關還比較隱祕,一般人還真發現不了。

你需要點選圖示位置 Edit Configurations 處。

每週分享五個 PyCharm 使用技巧(二)

然後在這裡打勾選中。

每週分享五個 PyCharm 使用技巧(二)

設定上之後,之後你每次執行後指令碼後,都會預設為你儲存所有變數的值,併為你開啟 console 命令列除錯介面。

除了上面這種方法,其實還有一種方法可以在除錯過程中,執行命令表示式,而這種大家可能比較熟悉了,這邊也提一下,就當是彙總一下。但是從功能上來說,是沒有上面這種方法來得方便易用的。因為這種方法,必須要求你使用 debug 模式執行專案,並打斷點。

使用方法就是,在你打了斷點後,在圖示位置處,點選右鍵使用 Evaluate Expression

每週分享五個 PyCharm 使用技巧(二)

就彈出了一個 Evaluate Expression 視窗,這裡 可以執行命令表示式,直接操作變數。

每週分享五個 PyCharm 使用技巧(二)

07. 指定引數執行指令碼

你在 Pycharm 執行你的專案,通常是怎麼執行的?我的做法是,右鍵,然後點選 Run,或者使用快捷鍵 Shift + F10

有時候,在執行/除錯指令碼的時候,我們需要指定一些引數,這在命令列中,直接指定即可。

假設在命令列中,執行指令碼的命令是這樣

python main.py init --local
複製程式碼

對於剛使用 Pycharm 的同學,可能並不知道 Pycharm 也是可以指定引數的。點選下圖位置

每週分享五個 PyCharm 使用技巧(二)

進入設定皮膚,在 Script parameters 中填入引數即可。

每週分享五個 PyCharm 使用技巧(二)

同時在上圖的底部,你可以看到,這裡可以很方便的切換 直譯器,比你跑到這邊來要容易得多吧

每週分享五個 PyCharm 使用技巧(二)

08. 搜尋時過濾測試檔案

接下來,介紹一個,我看框架原始碼的時的一個小技巧,可能只適用一小部分人吧。

我平時會看的框架是 OpenStack ,我不知道其他框架是怎樣的,但在 OpenStack 裡面帶有大量(真的很多)的單元測試檔案。這給我在使用 Find in Path 時帶來了不小的困擾,你可以從下圖的搜尋結果中感受一下,搜尋一個函式,test 檔案裡的結果比 正常檔案要多很多。

每週分享五個 PyCharm 使用技巧(二)

這些測試檔案的搜尋結果,對於我們看原始碼不僅沒有任何幫助的,更重要的是還干擾視線。於是我就研究了一下,從檔名入手,只要在 File mask 裡填寫 !test* 可以將這些test檔案過濾掉。搜尋結果一下子清晰很多。

每週分享五個 PyCharm 使用技巧(二)

09. 關閉煩人的燈泡提示

本來沒有想寫這個的,但是知乎上有一位朋友有這個需求,那我研究了下。

每週分享五個 PyCharm 使用技巧(二)

先來說下這個燈泡提示是什麼,有什麼用?

當我們在程式碼裡面有語法錯誤,或者程式碼編寫不符合 pep8 程式碼規範時,滑鼠選擇有問題的程式碼,就會自動彈出小燈泡,這個燈泡是有顏色之分的,如果是紅燈泡,一般都是語法問題,如果不處理會影響程式碼執行。而如果是黃燈泡,就只是一個提示,提示你程式碼不規範等,並不會影響程式的執行。

雖然這個燈泡,是出於善意之舉,但我認為它確實有點多餘(可能是我個人沒有使用它的習慣),要是語法錯誤會有紅色波浪線提示。你可能會說燈泡不僅起到提示的作用,它還可以自動糾正程式碼,我個人感覺並沒有人工校正來得效率,來得精準。

基於有時還會像知乎上這個朋友說的這樣,會擋住我們的程式碼,會經常誤點,這確實也是一個煩惱。

我研究了下,Pycharm (2018版本)裡是有開關按鈕的,將下圖中的這個選項(Show intention bulb)取消勾選,就可以關閉這個功能。

每週分享五個 PyCharm 使用技巧(二)

10. 關閉礙眼的波浪線

下面我先給出了一小段程式碼示例,思考一下,為什麼name,my_name 不會有波浪線,而 myname 和 wangbm 會有波浪線呢?

每週分享五個 PyCharm 使用技巧(二)

Pycharm 本身會實時地對變數名進行檢查,如果變數名不是一個已存在的英文單詞,就會出現一條波浪線,當一個變數裡有多個單詞時,Python 推薦的寫法是用下劃線來分隔(其他語言可能會習慣使用駝峰式命名法 ,但 Python 是使用下劃線),所以在 Pycharm 看來 my_name 是規範的,而 myname 會被當成是一個單詞對待,由於它在單詞庫裡並沒有它,所以 myname 是不規範的。

每個人的變數命名習慣不一樣,如何你在專案裡大量使用了 myname 這種風格的變數命名方法,像下面這樣(隨便找了一段 cloudinit 的程式碼),是讓人挺不舒服的,總有一種程式碼有 bug 的錯覺。

每週分享五個 PyCharm 使用技巧(二)

那麼如何關閉這個非語法級別的波浪線呢?很簡單,它的開關就在你的右下角那個像 人頭像 一樣的按鈕

每週分享五個 PyCharm 使用技巧(二)

然後選擇 Syntax 級別的即可。同樣一段程式碼,效果如下,乾淨了很多。

每週分享五個 PyCharm 使用技巧(二)

本週的 PyCharm 使用技巧,就是這五個了,你學會了嗎?

最後,我可以求個贊嗎? *^_^*

關注公眾號,獲取最新干貨!