Successfully reported this slideshow.
Your SlideShare is downloading. ×

211120 他人の書いたPythonスクリプトをステップ実行で理解する

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
210630 python
210630 python
Loading in …3
×

Check these out next

1 of 39 Ad

211120 他人の書いたPythonスクリプトをステップ実行で理解する

Download to read offline

他人の書いたPythonスクリプトをステップ実行で理解する
Visual Studio Code + Python デバッガ
2021-11-20
PyCon mini Shizuoka 2021
西本卓也 @24motz @nishimotz

他人の書いたPythonスクリプトをステップ実行で理解する
Visual Studio Code + Python デバッガ
2021-11-20
PyCon mini Shizuoka 2021
西本卓也 @24motz @nishimotz

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to 211120 他人の書いたPythonスクリプトをステップ実行で理解する (20)

Advertisement

More from Takuya Nishimoto (20)

Recently uploaded (20)

Advertisement

211120 他人の書いたPythonスクリプトをステップ実行で理解する

  1. 1. 他人の書いた Python スクリプトを ステップ実行で理解する 2021-11-20 PyCon mini Shizuoka 2021 西本卓也 @24motz / @nishimotz 1
  2. 2. おまえ誰よ • 広島 → 東京 → 京都 → 東京 → 広島 • 大学教員 → フリーランス/リモートワーク/エンジニア • NVDA 日本語チーム • 視覚障害者のための画面読み上げソフト • PyCon mini Hiroshima / すごい広島 with Python • Python Boot Camp • TA : 広島、岡山、山口 2
  3. 3. 夫婦 + 犬(8歳) + 猫(1歳) アンナ ハコ
  4. 4. 4
  5. 5. 5 内容 • 素材 • Python Boot Camp テキストから引用改変 • デバッガの操作の基本 • Visual Studio Code の設定と機能 • Python におけるステップ実行
  6. 6. 6 デバッガは(たぶん)不滅
  7. 7. 7 デバッガとは (Wikipedia) • デバッグ作業を支援するコンピュータプログラムのこと • ブレークポイント • ステップ実行 • ステップイン • ステップオーバー • ステップアウト • 変数確認/変数書き換え
  8. 8. 8 すべての行をステップ実行でカバーする • ブレークポイント設定 → デバッグ開始 → ステップ実行 → 継 続 def fizzbuzz(num): print('a') print('b') print('c') print('d') return num for num in range(1, 101): fizzbuzz(num) 1回目はステップインで 下の階層もステップ実行 2回目はステップオーバーして 下の階層に入らない
  9. 9. 9 ステップオーバー • 下の階層に入らないで1行ずつ実行 def fizzbuzz(num): print('a') print('b') print('c') print('d') return num for num in range(1, 101): fizzbuzz(num)
  10. 10. 10 ステップイン • 下の階層にどんどん入りながら1行ずつ実行 def fizzbuzz(num): print('a') print('b') print('c') print('d') return num for num in range(1, 101): fizzbuzz(num)
  11. 11. 11 ステップアウト • ひとつ上の階層に戻るまで実行 def fizzbuzz(num): print('a') print('b') print('c') print('d') return num for num in range(1, 101): fizzbuzz(num) 上の階層で 1行分の処理が 終わった状態
  12. 12. 12 ブレークポイント • 関数の実行を止めたいなら中身の1行目がブレークポイント def fizzbuzz(num): print('a') print('b') print('c') print('d') return num for num in range(1, 101): fizzbuzz(num) ここは関数が呼ばれるたびに止まる def の次にここがステップ実行される
  13. 13. 13 ステップ実行の始め方 • 他人が書いたコード • デバッガそのものの練習になる • 他の開発者のサポートやメンター • デバッグ • オープンソースのプログラムの勉強や改造 • 動かして理解する方が早い場合 • pip install したモジュール • 後述
  14. 14. 14 pdb : 標準装備のデバッガ • OSC 2021 Online/Hiroshima (9月18日 陶山さん)
  15. 15. 15 IDLEのデバッガ
  16. 16. 16 Visual Studio Code + Python 拡張
  17. 17. 17
  18. 18. 18 メニューとショートカット • F5 : デバッグの開始 • 必要であれば拡張機能のインストールから • Shift+F5 : デバッグの停止 • F9 : ブレークポイント • F10 : ステップオーバー • F11 : ステップイン • macOS は mission control の設定と衝突 • Shift+F11 : ステップアウト
  19. 19. 19 インタープリターを選択 • 選択肢から選ぶだけ
  20. 20. 20 デバッガで仮想環境(venv)を有効化 • インタープリターの選択肢として仮想環境を選ぶ
  21. 21. 21 構成(configuration) • Python File : 現在アクティブな Python ファイルをデバッグ
  22. 22. 22 ブレークポイントを設定 • 行番号の左をクリックして赤いマルをつける (またはF9キー)
  23. 23. 23 breakpoint() = pdb 互換 • 書いた行の直後の行で止まる
  24. 24. 24 編集画面の右上の実行ボタンからも
  25. 25. 25 ブレークポイントで停止した状態 • 継続 / ステップオーバー / ステップイン / ステップアウト / 再起動 / 停止
  26. 26. 26 条件ブレークポイント • 通過回数(ヒットカウント) • 評価式
  27. 27. 27 ログメッセージ : 出力だけ行う • 出力先はデバッグコンソール
  28. 28. 28 デバッグコンソール • 式を入力すると値を表示できる
  29. 29. 29 ウォッチ式 • 毎回デバッグコンソールで表示しなくても
  30. 30. 30 launch.json : 構成を保存
  31. 31. 31 自動生成される launch.json • Syntax Error が出たらコメント行を削除
  32. 32. 32 "cwd": "${fileDirname}" • カレントディレクトリのファイル読み書きのデバッグなど
  33. 33. 33 "justMyCode" : false • requests の中もステップ実行
  34. 34. 34 requests の connection pooling
  35. 35. 35 Jupyter のデバッグ • セルごとに Debug Cell できる
  36. 36. 36 リスト内包表記 • ステップオーバーで何回止まる? • 100回 [fizzbuzz(num) for num in range(1, 101)]
  37. 37. 37 テストとステップ実行の相性 • doctest は動くが警告が出る • テストツールによってはデバッガと衝突する可能性
  38. 38. 38 5374 = 自治体のゴミの日がわかる • 富士市 • fuji.5374.jp • 広島市 • hiroshima.5374.jp • iCal 対応に不具合 • 9月 • すごい広島 with Python で議論 • 富士市の convert_ical.py を使う検討 • データの持ち方やデプロイ方針が違うので手直し中
  39. 39. 39 まとめ • VS Code の Python デバッガ • 無料 • エディタに一手間加えるだけで使える • シンプル、追加ファイルは .vscode/launch.json だけ • UIやプロトコルが言語に依存しない • デバッガの作法は普遍的 • 視覚的なデバッガは嬉しい • お気に入りの pip を読んで勉強しよう

Editor's Notes

  • https://www.youtube.com/watch?v=525SyowtXH8&list=PL1EP7zsxqFT91hSv3akx7w_N3KhyOJi_d
    https://docs.python.org/ja/3/library/pdb.html
  • https://stackoverflow.com/questions/34837026/whats-the-meaning-of-pool-connections-in-requests-adapters-httpadapter/34893364

×