この記事では、いくつかの一般的な Python エラーとその解決策を整理します。
1、構文エラー: 無効な構文
説明: 無効な構文は最も一般的なエラーの 1 つで、通常は Python の構文規則に違反するコードの作成が原因です。考えられる理由:
if
、などのwhile
ステートメントの後にコロンを書くのを忘れるfor
か、コロンをセミコロンまたは他の記号として書きます。解決策: 英語の半角コロンに変更します。- コード内に間違って閉じられた括弧が含まれているか、文字列内で使用されている引用符が間違って一致している可能性があります。解決策: 括弧と引用符を確認してください。
- 条件式には等号(=)が使用されます。解決策: 比較演算子 (==) に変更します。
- パラメータのない関数を定義する場合、括弧は追加されません。解決策: かっこを追加します。
…
エラー メッセージを確認します。通常、エラーの行番号と場所が示されています。適切なコード エディターは、コード内の構文エラーにもフラグを立てます。
2、構文エラー: デフォルト以外の引数がデフォルト引数の後に続きます
説明: 定義されたパラメータの順序が正しくありません。考えられる状況:
デフォルト値パラメータは、すべてのパラメータの最後に配置されるわけではありません。解決策: パラメータの順序を変更します。
3、SyntaxError : 識別子に無効な文字があります
説明: 識別子に無効な文字があります。通常、識別子 (変数名、関数名、クラス名など) で無効な文字が使用されていることが原因です。Python では、識別子は特定の命名規則に従う必要があり、特殊文字やスペースを含めることはできず、文字、数字、アンダースコアのみを含めることができ、文字 (またはアンダースコア) で始める必要があります_
。考えられる理由:
- 識別子には
@
、#
、$
、%
など、Python で認識されない特殊文字が含まれています。 - 識別子にスペースまたはタブが含まれています。
- 識別子は数字で始まります。
- 識別子が Python の予約語またはキーワードと競合しています。
4、TypeError: str (「XXX」ではない) を str に連結することしかできません。
説明: 文字列は他の文字列とのみ連結できます。考えられる理由:
文字列を、整数、浮動小数点数、ブール値、シーケンス オブジェクトなどの文字列以外のデータ型と連結しようとしました。解決策: 関数を使用して、連結する前にデータ型を変換しますstr()
。
5、TypeError: f() はちょうど 2 つの引数を取ります (1 つは与えられます)
説明: 関数に十分な引数が指定されていません。考えられる理由:
2 つのパラメーターを持つ関数を定義しますが、呼び出されたときに提供されるパラメーターは 1 つだけです。解決策: 不足しているパラメータを指定して関数呼び出しを完了します。
6、TypeError: 'タプル' オブジェクトは項目の割り当てをサポートしていません
説明: タプル要素は変更できません。考えられる理由:
インデックスによってタプル要素を変更しようとします。解決策: タプルをリストに変換するか、変更操作を削除します。
7、ValueError: 文字列を float に変換できませんでした: '12.2s'
説明: 文字列を浮動小数点数に変換できませんでした。考えられる原因:
float()
関数は非浮動文字列データ型を受け入れました。解決策: float 文字列に変更します。
8、ValueError: 基数 10 の int() のリテラルが無効です
説明:int()
無効なパラメータが関数に渡されました。考えられる理由:
- 文字列に数字以外の文字が含まれています。解決策: 文字列に数字のみが含まれていることを確認してください。
str.isdigit()
このメソッドを使用して、文字列に数字のみが含まれているかどうかを確認できます。 - 小数点を含む文字列を整数に変換しようとしています。解決策: 文字列に浮動小数点数が含まれる可能性がある場合は、
float()
関数を使用して浮動小数点数に変換してから、整数に変換します。 - 数値が大きすぎるか小さすぎます: 整数で表現できる範囲を超えた数値文字列を整数に変換しようとしました。
float()
解決策: 数値が大きすぎるか小さすぎて、Python の整数表現、非常に大きな値を処理するためのその他のデータ型の範囲を超えません。
9、ValueError: 部分文字列が見つかりません
説明: サブストリングを検索しようとしましたが、ターゲットストリング内でサブストリングが見つかりませんでした。このエラーは、文字列の 、 などのメソッドを使用すると発生する可能性がindex()
ありfind()
ますrfind()
。解決策: 検索する前に確認してください。
10、ZeroDivisionError: ゼロ除算
注: 0 を除数として使用することはできません。考えられる原因: 除算、整数除算、または剰余演算を実行するときに、除数として 0 が使用されました。解決策: 除算を実行する前に、除数がゼロかどうかを確認し、条件ステートメントを使用してゼロによる除算を回避します。
11、属性エラー: 'モジュール' オブジェクトには属性 xxx がありません'
説明: モジュールには関連付けられた属性がありません。考えられる理由:
- スペル エラー: アクセスしようとしているプロパティまたはメソッド名のスペルが間違っています。解決策: スペルをチェックして、正しいプロパティ名またはメソッド名を使用していることを確認してください。
- ファイルに名前を付ける
.py
ときは、Python の予約語またはモジュール名と同じものを使用します。解決策: ファイル名を変更します。 - モジュールの名前変更: モジュールをインポートしてエイリアスを使用する場合は、そのエイリアスを使用してモジュールのプロパティまたはメソッドにアクセスする必要があります。解決策: 正しいエイリアスを使用してプロパティまたはメソッドにアクセスします。
12、属性エラー: 'Obj' オブジェクトには属性 'attr' がありません
説明: オブジェクトには関連付けられたプロパティがありません。考えられる理由:
- スペル エラー: アクセスしようとしているプロパティまたはメソッド名のスペルが間違っています。解決策: スペルをチェックして、正しいプロパティ名またはメソッド名を使用していることを確認してください。
- プロパティまたはメソッドがプライベート (
__
二重アンダースコアで始まる) の場合、直接アクセスすることはできません。解決策: プライベート プロパティまたはメソッドにアクセスする場合は、単一のアンダースコアを使用する_
か、クラスのメソッドを通じてアクセスできます。 - オブジェクト タイプ エラー: 場合によっては、クラスであるべきオブジェクトのメソッドを呼び出したり、非オブジェクトでオブジェクト メソッドを呼び出そうとしたりすることがあります。解決策: オブジェクト メソッドとクラス メソッドを正しい方法で使用するようにしてください。オブジェクト メソッドはオブジェクト上で呼び出す必要があり、クラス メソッドはクラス上で呼び出す必要があります。
13、FileExistsError: [Errmo 17] ファイルが存在します
説明: ファイルはすでに存在します。解決策: まずファイルが存在するかどうかを確認し、存在する場合は再度作成しないでください。
14、FileNotFoundError: [Ermo 2] そのようなファイルまたはディレクトリはありません
説明: 要求されたファイルまたはディレクトリは存在しません。解決策: ファイルまたはディレクトリへのパスが正しいことを確認してください。
15、IndentationError: インデントされたブロックが予期されました
説明: インデントされたブロックが必要です。考えられる理由:
- 関数またはクラスを定義するときにインデントはありません。解決策: インデントを追加する
if
,for
orステートメントの構成の下にインデントはありませんwhile
。解決策: インデントを追加する
16、IndentationError: 予期しないインデント
説明: インデントエラー。考えられる原因: インデントに加えて、コードの前に余分なスペースが表示されます。解決策: 余分なスペースを削除します。
17、IndentationError: unindent はどの外側のインデント レベルにも一致しません
説明: インデントの問題です。考えられる理由:
- 同じレベルのコード ブロックでは、異なるインデント ルールが使用されます (コードの不整列)。解決策: インデントを調整します。
- 不正な文字またはその他の形式を含む非表示のコンテンツ。解決策: 不正な文字を削除します。
18、IndexError: リストのインデックスが範囲外です
説明: リスト索引が範囲外です。考えられる理由:
- 要素を取得するときに指定されたインデックス値がリストの長さを超えています。解決策: インデックス値を変更します。
- リストが空です。要素の取得中にエラーが発生しました。解決策: 取得する前に、null でないかどうかを確認してください。
19、ディレクトリエラー: [Ermo 21] ディレクトリです
説明: ファイルに対して操作が試行されましたが、ディレクトリが指定されました。考えられる原因: ディレクトリをファイルとして操作すると、たとえば「test」がディレクトリの場合、使用するとos.remove(test)
エラーが発生します。解決策: 対応するファイル名を追加します
20、KeyError: '年齢'
説明: キーエラー。考えられる理由:
- キーに基づいて辞書の値を取得する場合、指定されたキーが存在しません。解決策: 既存のキーに変更します。
- 存在しないキーは削除されます。解決策: 削除する前に、存在するかどうかを確認してください。
21、ModuleNotFoundError: 'pymysql' という名前のモジュールがありません
説明: モジュールが存在しません。考えられる理由:
- モジュール名のスペルが間違っています。解決策: 正しいスペル
- モジュールはインポートされていません。解決策:
import
次のステートメントを使用してモジュールをインポートします。 - 環境の問題: モジュールがインストールされていても、コードが実行されている環境でモジュールが見つからないことがあります。ご利用の環境にインストールされていない可能性があります。解決策: 使用するモジュールが仮想環境にインストールされていることを確認してください。
- 一部のモジュールは、使用されている Python バージョンをサポートしていない場合があります。解決策: 使用されている Python のバージョンが、インポートされたモジュールと互換性があることを確認してください。モジュールのドキュメントを参照して、サポートされている Python のバージョンを確認してください。
22、NameError:名前テスト'が定義されていません
説明: コード内で未定義または存在しない変数または名前 (「test」) を使用しようとしました。または、現在のスコープで名前が見つかりませんでした。考えられる理由:
- 変数または名前が未定義です。解決策: 使用する前に、変数または名前を定義します。
- 変数は、そのスコープの外でアクセスしようとしているときに、別のスコープ (関数内や条件ブロック内など) で定義される可能性があります。解決策: 関数の外または別のスコープで変数を使用する必要がある場合は、グローバル スコープで変数を定義します。
23、再帰エラー: 最大再帰深度が比較に超過しました
説明: 再帰の最大深さを超えました。解決策: 無限再帰を無効にし、再帰の深さを設定します。
24、タイムアウトエラー [WinError 10060] 応答がない、または一定時間経過してもホストから応答がありません。接続試行に失敗しました。
説明: 接続がタイムアウトしました。考えられる理由:
- データベース接続がタイムアウトしました。解決策: データベース接続構成情報が正しいかどうかを確認してください。
- リクエスト URL がタイムアウトしました。解決策: URL が正しく、アクセス可能であることを確認してください。
- FTPサーバーへの接続がタイムアウトしました。解決策: FTP への接続に使用されるパラメータが正しいことを確認してください。