Pythonで文字列の末尾を確認する際によく遭遇するエラーに`str.endswith()`メソッドに関するものがあります。このエラーの解決策と正しい使い方について解説します。
## エラーの例
以下のようなコードを実行すると、TypeError が発生することがあります:text = "hello.txt"
if text.endswith([".txt", ".doc"]): # エラー発生!
print("ドキュメントファイルです")
エラーメッセージ:TypeError: endswith first arg must be str or a tuple of str, not list
## 解決策
`endswith()`メソッドは、引数として文字列またはタプルを受け取ります。リストは使用できません。
### 正しい使い方 1: 単一の文字列を確認text = "hello.txt"
if text.endswith(".txt"): # OK
print("テキストファイルです")
### 正しい使い方 2: 複数の文字列を確認
複数の末尾パターンを確認する場合は、タプルを使用します:text = "hello.txt"
if text.endswith((".txt", ".doc")): # OK
print("ドキュメントファイルです")
## endswith()メソッドの基本構文str.endswith(suffix[, start[, end]])
- suffix: 検索する末尾の文字列(文字列またはタプルで指定)
- start: 検索開始位置(オプション)
- end: 検索終了位置(オプション)
## 実践的な使用例
### ファイル拡張子の確認filename = "document.pdf"
if filename.endswith((".pdf", ".doc", ".docx")):
print("ドキュメントファイルです")
### 検索範囲を指定した確認text = "Hello World.txt"
インデックス0から5までの範囲で確認
if text.endswith("o", 0, 5): # "Hello"の末尾が"o"かを確認
print("oで終わります")
### 大文字小文字を区別しない確認text = "Hello.TXT"
if text.lower().endswith(".txt"):
print("テキストファイルです")
## よくある間違い
1. リストを使用する間違い
text.endswith([".txt", ".doc"]) # TypeError
正しい
text.endswith((".txt", ".doc"))
2. カンマを忘れる間違い
text.endswith((".txt")) # 単一要素のタプルにはカンマが必要
正しい
text.endswith(".txt") # 文字列の場合はOK
text.endswith((".txt",)) # タプルの場合はカンマが必要
## まとめ
- `endswith()`は文字列またはタプルを引数として受け取る
- 複数のパターンを確認する場合は、タプルを使用する
- リストは使用できない
- 大文字小文字を区別する
- 検索範囲を指定することも可能
これらの点に注意して使用することで、`endswith()`メソッドを効果的に活用できます。