Python:インデントとコロン : — if/for/def/try の基本ルール
音声
目次
インデントとコロンの基本
今回できるようになることは、if/for/def/tryでコロンとインデントを正しく使えるようになることです。
Pythonはブロックを波括弧ではなくインデント(字下げ)で表す言語です。コロン(:)は「これからブロックが始まります」という合図で、忘れるとSyntaxErrorになります。
インデントはスペースが一般的で、1レベルは慣習的に4スペースです。タブとスペースの混在は避けると、読みやすさと互換性が高まります。
使い分けの基準としては、複数行の処理が必要ならコロン+インデントのブロックを使い、一行だけで簡潔に書きたい場合は三項演算子や内包表現を検討するとよいです。
if と for の書き方
if 文は条件の末尾にコロンを置き、続く行をインデントします。elif と else も同様です。
for 文もコロンで終え、繰り返し内の処理をインデントします。1行で書くこともできますが、可読性を考えると複雑な処理はブロック化するほうが望ましいです。
if x > 0: print("pos")
if x > 0:
print("pos")
print(type(x))
for i in range(3):
print(i)
動作確認では、条件分岐やループの中に print を置いて値や型を出力すると把握しやすいです。ループ中に変数が期待どおりに更新されるかも、print で追うと確認しやすいです。
ポイントとして、ネストが深くなると読みづらくなるため、処理を小さな関数に分けるのが良いです。
def と例外処理(try)の書き方
関数定義(def)もコロンで終えて、次行をインデントして本体を書きます。例外処理は try: の後に except を続けます。最小コードは次のとおりです。
def greet(names):
for n in names:
if n:
print(f"Hello, {n}")
else:
print("Hello, stranger")
def divide(a, b):
try:
return a / b
except ZeroDivisionError:
return None
if __name__ == "__main__":
names = ["Alice", "", "Bob"]
greet(names)
print("3/0 ->", divide(3, 0))
このコードでは、greet が名前を順に出力します。divide はゼロ除算のときに None を返します。出力例は下の「出力例:」で示します。
関数は処理を分割して、ネストを浅く保つ助けになります。短い処理はその場で書き、再利用する処理やテストしたい処理は def で関数化するとよいです。
デバッグの見方(print / logging / 変数の確認)
実行中の値を把握するには、print が最も手軽です。ログが増えてきたら、標準ライブラリの logging を使うとレベルを管理しやすくなります。
logging の基本設定は、次のとおりです。
import logging
logging.basicConfig(level=logging.INFO)
進め方は、次の5つに収めると整理しやすいです。
- 問題の前後に print を置きます。
- 期待値と実際値を比較します。
- type() で型を確認します。
- 必要であれば logging に切り替えます。
- VSCode のデバッガでブレークポイントを使います。
実行方法は、次のようにコマンドで実行します。
python sample.py
# または VSCode でファイルを開き、実行ボタンを押してください
出力例は次のとおりです。
Hello, Alice
Hello, stranger
Hello, Bob
3/0 -> None
確認するときは、関数の返却値を print で表示し、type() で型も合わせて見ておくと要チェック箇所を絞り込みやすいです。途中結果も表示して、ロジックが期待どおりに進んでいるか確かめます。
よくあるミスは2つです。if や def の行末にコロンを付け忘れると SyntaxError になりやすいので、該当行の末尾に : を追加します。タブとスペースが混在すると IndentationError になりやすいので、エディタ設定をスペース4に統一し、不要なタブはスペースに置換します。
print で追いかけるデバッグは泥臭いですが、最初は間違い探しが速くなります。
注意(ここだけ)
タブとスペースが混在すると想定外の IndentationError につながりやすいです。
- プロジェクトではスペース4に統一すると安定します。
要約
コロン(:)はブロック開始の合図です。必ず行末に付けて、次の行からインデントを続けてください。
インデントはスペース4つが慣習です。タブと混在させないようにしてください。
if/for/def/try はすべて、コロン(:)とインデントでブロックを作る書き方です。
デバッグはまず print で状況を確認し、規模が大きくなったら logging とデバッガで追跡するのが要チェックです。
よくあるエラーはコロンの付け忘れとインデントの不一致です。原因を理解して修正してください。