IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第42回 Pythonのエラーメッセージ、わからない時は検索やQAサイトで質問。注意点は? (菱沼佑香) 2023年7月

こんにちは、吉政創成 菱沼です。
今回も「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習します。
こちらの書籍は誰にでも読みやすいコードを書けるようになることを目的とされている書籍のため、以前学習したものも改めて学びなおす場面もあるかと思います。引き続き、超初心者の方にお付き合いいただけましたら幸いです。

さて前回に引き続き、1章エラーメッセージの読み方を学習していきます。
前回はトレースバックの検証の基本的なことについて学習しました。
エラーメッセージにはいろいろな種類がありますので、作るプログラムが高度になるほど、なかなか読み解くのは難しい場面が多々出てくることになると思います。そこで今回はわからない時に解決する手段のひとつ、インターネットでの検索やコミュニティ等での質問時に注意したいことについて確認したいと思います。

Pythonのエラーメッセージを検索してみよう!検索のコツは?

分からないことが出てきたらネットで検索する、というのは私自身もよくしますし、そうする人がほとんどだと思いますので、検索が苦手な人に向けたコツを含めて簡単に引用してご紹介したいと思います。
まずは引用から。

--------
P.7 エラーメッセージは、きちんとした文章ではない短い語句の場合があります。これはプログラマーが日常的に遭遇することですから、完璧な説明というよりは注意喚起を目的としていると思ってください。初めてエラーメッセージを目にした際には、それをコピー&ペーストしてインターネットで検索すると、そのエラーの意味や原因についての詳細な説明が表示される場合が多いでしょう。
図はpython "ZeroDivisionError: division by zero"を検索した結果です。エラーメッセージを引用符で囲むと、より検索がしやすくなります。
--------

テキスト自体が日本語訳されたものなので、実際には英語での検索結果の図が掲載されているのですが、ここでは日本語での検索結果の画像を載せたいと思います。

fig01

引用にあるように「"(ダブルクォーテーション/半角)」で囲むと完全一致の検索になります。
私自身は囲まず検索することがほとんどで、それでも特に問題を感じたことはありませんが、絶対に含まれていて欲しい方は囲んで検索してみましょう。ただ、エラーメッセージの中に、プログラム特有の情報が含まれているようなら完全一致では引っかからないので、一部分を取り除いて完全一致で検索するか、「"」をつけずに部分一致で検索するかになります。

Googleの場合であれば何も設定していなければ基本的に日本語での検索で海外のサイトも引っ掛かりますが、海外サイトの検索を優先するような設定も可能です。また、なるべく新しい情報に限りたいのであれば、期間を限定することもできますので、検索が苦手で上手く情報にたどり着けないという方は試してみるのもいいかもしれません。

英語圏を対象にGoogle検索するURL(方法)

【Google検索の使い方】完全一致・OR検索など 検索結果を効率よく絞り込む9つの方法

ちなみに私はエラーメッセージの検索に限らず、とにかく思い当たるキーワードを詰め込んでみたり、逆に言葉を減らしてシンプルなキーワードにしてみたりします(Pythonとつけるのは必須)。よくするのはわからない言葉を検索したときに出てきたサイトに含まれている言葉の中で、特に関係が強そうなキーワードを追加もしくは単独で検索しています。理解が深められるような情報にすぐにたどり着けるよう検索技術を磨く日々です。検索上手を目指したいと思います。こうするとより良いよ!という情報があればぜひ教えて頂きたく...。

どうしてもわからない時はPythonを扱う質問サイトで聞いてみる、どう書けばいい?

さて、エラーの解消にはネット検索の次にエラーを予防するためにリンターという文法を確認してくれるツールを使用するということがこの後のテキストに書かれているのですが、調べてみるとそれなりに長くなりそうだったため次回の学習にして、このままネットでの質問方法について確認してみたいと思います。

さて、検索、リンターと、やれることをやってもそれでも解決できなければ、聞くのが一番!ということなんですが、近くに聞ける方がいない場合にどうするかというと、ネットで質問できるサイトを利用するという手段があります。今のところ私自身は質問したことはないのですが、わからないことを検索している最中にプログラミングに特化した某QAサイトを閲覧したことはありますので、利用したことはない人でも見たことはあるのではないかと思います。
回答してくれる人がわかりやすいように現在の状況や質問を明確に書く必要があることは確かなのですが、どんなポイントに気を付けなくてはならないのか。引用となると長くなってしまうので、必要な個所を関連する内容でまとめて書きだてみました。その次には具体的な質問例が載っていましたので、そこはそのまま引用します。

<質問をするときに書いた方が良い事>

  • 質問内容を要約したタイトルをつける(NG例:助けて、困りました、なぜ動かないの?など)
  • プログラム全体のソースコード(コピペ実行できるよう、インデントなど適切なフォーマットに整える)
  • どう動かしたかったのか、最終的な目的
  • エラーメッセージの全文とトレースバック(エラーが発生する条件や頻度などの詳細)
  • 実行した環境(OS・バージョン、Pythonのバージョン、ライブラリ名とバージョンなど)
  • すでに試したことと、その結果
  • その質問で何を聞きたいかを明確に書く

<注意したいこと>

  • 質問していいかの確認や内容を察してもらおうとせず、明確な質問形式ですぐに本題に入るようにする
  • なるべく不要なやり取りを減らすために最初の投稿時に必要そうなことをすべて書いておく
  • 質問したい内容にあった適切なサイトで質問する(PythonならPythonに)
  • 課題を丸投げしない
  • 投稿するサイトのガイドラインを確認しておく

--------
P.15 具体的な質問例
本節では、これまでの注意点に沿ったよい質問例を紹介します。
 Selenium Webdriver: 要素の属性をすべて見つけるにはどうすればよいですか?
 Python Selenium モジュールでは、次のようにWebElementオブジェクトのget_attribute()で属性の値を取得することができます。
 foo = elem.get_attribute('href')
 例えば'href'という名前のゾック性が存在しない場合はNoneが返されます。
 私が質問したいことは、ある要素の全属性のリストをどのようにすれば得られるかということです。get_attribute()やget_attribute_names()のようなメソッドはないようです。
 Python用のSeleniumモジュールのバージョン2.44.0を使用しています。

この質問はhttps://stackoverflow.com/questions/27307131/1893164/にあるものです。見出しは質問を1文で要約しています。見出しは質問の形で書かれていて、クエスチョンマークで終わっています。誰かが将来インターネットで検索したときにこの見出しを読めば、それが自分の質問に関連しているかどうかがすぐにわかります。
この質問では、等幅フォントを使用して、文章も読みやすく区切っています。「私が質問したいことは」と前置きしていて、質問がどんな内容化という事がわかりやすいですね。get_attribute()やget_attribute_names()というメソッドがありそうだけどもなかったことを示すことで、質問者がどのような回答をほしがっているのか想像できますし、そのためにあれこれ努力したことも感じさせます。さらに、関連があった場合のことを考慮してSeleniumモジュールのバージョン情報も書いています。情報が足りないよりは、多めに情報を盛り込んでおいた方がよいでしょう。
--------

掲示板なので、必ずしも誰かがずっと見ているわけではない、すぐに質問に気づいてもらえるわけではない、ということを前提に、答えてくれる人の手間をかけないよう、スムーズなやり取りができるように心がけることが肝要なようです。また、すでに同じような質問が上がっていることがありますので、事前に検索する、質問するにしてもタイトルを解りやすくつけて他の人がたどり着きやすいようにするといったことも大切なんだそう。

サイトによっては投稿するときの書式が用意されていて、必要な情報が漏れないような工夫がされているところもあります。無い場合であればそういった書式を参考にしてもいいと思いますし、先ほど書いた項目を参考に質問例のような必要な情報を不足なく盛り込めるように注意したいですね。

そういえば、最近はChat GPTを使って学習してみることがあります。
質問するときは上記で挙げた項目のように、しっかりと前提条件などを書くとより明確な回答が返ってきます。本当に、しっかり返してくれるんですよね...。返ってきた内容の中からわからないことがあればそこについて聞くこともできますので、学習がはかどります。
場合によっては正否を確認しなくてはならないこともあるツールではあるかもしれませんが、Python初心者としてはこういった学習面でコードの改善を含めた質問をして、すぐ回答をもらえるので助かるなあと思いました。
ネットでの検索も、コミュニティサイトでの投稿も、こういった便利なツールを使うにしても、適切な情報に素早くたどり着けるようにするための工夫や注意点は忘れないようにしていきたいです。

それでは今回はこちらで終了です。次回はPythonとリンターについて学習したいと思います。
今回もお付き合いいただき、ありがとうございました。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes