Pyright(Pylance)のtype check ruleの設定全部解説する: その1
この記事で解説すること
Pythonの型チェックツールPyrightは設定によって静的型解析の挙動を変えることができる。
具体的には以下のページにある「Type Check Diagnostics Settings
」の値をいじる。
またPylance(マイクロソフトによって提供されているVisual Studio Code向けのPythonプラグイン)の型検査部分も以下のページに有るようにPyrightと同じなので、同じ設定値を使うことになる。
この記事では各ルールによって型検査の挙動がどう変わるか、どの様に型エラーを修正すればよいかを解説する。
そもそもPyrightとは
Pythonの型チェックツール。
コードに付いた型アノテーションを元に静的解析(コードを実際に動作させることなく検査すること)して、プログラムの欠陥を発見するツール。
Pythonの型チェックツールはmypyなど他にもある。
だがVisual Studio CodeのPythonプラグインであるPylanceの型チェックの部分はPyrightなので、Pyrightのシェアも増えていくと考えられる。
使用するツールのバージョン
ツール | バージョン |
---|---|
Python | 3.11.6 |
Pyright | 1.1.341 |
各ルール解説
前準備
各サンプルコードではreveal_type
を使って型チェッカーが実際に型をどの様に推論しているかをデバッグする。
以下の様にしてreveal_typeはimportできる。
from typing import reveal_type
strictListInference
概要
strictListInference
は、リストの型推論において厳格な型を使用するかどうかを制御する設定だ。この設定が true
になっている場合、リスト内の異なる型の要素からより詳細なユニオン型を推論する。たとえば、[1, 'a', 3.4]
というリストは list[int | str | float]
と推論される。逆に、この設定が false
(デフォルト値)の場合は、同じリストがより一般的な list[Any]
として推論される可能性がある。
設定値ごとの挙動
strictListInference: true
- リスト内の各要素の具体的な型を基に厳密な型推論を行う。
- リスト
[1, 'a', 3.4]
はlist[int | str | float]
と推論される。
strictListInference: false
- リストの型推論が一般的に行われ、要素の具体的な型は考慮されない。
- リスト
[1, 'a', 3.4]
はlist[Any]
と推論される可能性がある。
サンプルコード
-
strictListInference: true
の場合mixed_list = [1, 'a', 3.4] reveal_type(mixed_list) # list[int | str | float] と推論される
-
strictListInference: false
の場合mixed_list = [1, 'a', 3.4] reveal_type(mixed_list) # list[Any] と推論される可能性がある
型エラーとその解決策
型エラーが発生する場合は、リスト内の要素が予期される型と一致しないときだ。strictListInference
が true
の場合、型エラーを解決するにはリスト内の要素の型が一貫性を持つように修正する必要がある。
たとえば、リストが list[int | str]
と推論される場合、すべての要素が int
または str
型である必要がある。それ以外の型の要素がある場合、型エラーが発生する。このようなエラーを修正するためには、リスト内の要素を適切な型に変更するか、リストの型注釈を変更する。
strictDictionaryInference
概要
strictDictionaryInference
は、辞書のキーと値の型推論において、厳格な型推論を使用するかどうかを決定する設定である。この設定が true
になっている場合、辞書内の異なる型の値からより詳細なユニオン型を推論する。例えば、辞書 {'a': 1, 'b': 'a'}
は dict[str, int | str]
と推論される。逆に、この設定が false
の場合は、同じ辞書が dict[str, Any]
として推論される可能性がある。
設定値ごとの挙動
-
strictDictionaryInference: true
- 辞書内の値の具体的な型を基に厳密な型推論を行う。
- 辞書
{'a': 1, 'b': 'a'}
はdict[str, int | str]
と推論される。
-
strictDictionaryInference: false
- 辞書の型推論が一般的に行われ、値の具体的な型は考慮されない。
- 辞書
{'a': 1, 'b': 'a'}
はdict[str, Any]
と推論される可能性がある。
サンプルコード
-
strictDictionaryInference: true
の場合mixed_dict = {'a': 1, 'b': 'a'} reveal_type(mixed_dict) # dict[str, int | str] と推論される
-
strictDictionaryInference: false
の場合mixed_dict = {'a': 1, 'b': 'a'} reveal_type(mixed_dict) # dict[str, Any] と推論される可能性がある
型エラーとその解決策
strictDictionaryInference
が true
の場合、辞書内の値が予期される型と一致しないときに型エラーが発生する可能性がある。型エラーを解決するには、辞書内の値の型が一貫性を持つように修正するか、辞書の型注釈を適切に設定する必要がある。
例えば、辞書が dict[str, int]
と推論される場合、すべての値が int
型である必要がある。str
などの他の型の値が含まれている場合、型エラーが発生する。このようなエラーを修正するためには、辞書内の値を適切な型に変更する。
了解だ。指摘された点に注意して、strictSetInference
ルールについての説明を修正し、翻訳する。
strictSetInference
概要
strictSetInference
は、セットの型推論において厳格な型推論を使用するかどうかを制御する設定である。この設定が true
になっている場合、セット内の異なる型の要素からより詳細なユニオン型を推論する。例えば、セット {1, 'a', 3.4}
は set[int | str | float]
と推論される。逆に、この設定が false
の場合は、同じセットが set[Any]
として推論される可能性がある。
設定値ごとの挙動
-
strictSetInference: true
- セット内の各要素の具体的な型を基に厳密な型推論を行う。
- セット
{1, 'a', 3.4}
はset[int | str | float]
と推論される。
-
strictSetInference: false
- セットの型推論が一般的に行われ、要素の具体的な型は考慮されない。
- セット
{1, 'a', 3.4}
はset[Any]
と推論される可能性がある。
サンプルコード
-
strictSetInference: true
の場合mixed_set = {1, 'a', 3.4} reveal_type(mixed_set) # set[int | str | float] と推論される
-
strictSetInference: false
の場合mixed_set = {1, 'a', 3.4} reveal_type(mixed_set) # set[Any] と推論される可能性がある
型エラーとその解決策
strictSetInference
が true
の場合、セット内の要素が予期される型と一致しないときに型エラーが発生する可能性がある。型エラーを解決するには、セット内の要素の型が一貫性を持つように修正するか、セットの型注釈を適切に設定する必要がある。
例えば、セットが set[int | str]
と推論される場合、すべての要素が int
または str
型である必要がある。それ以外の型の要素が含まれている場合、型エラーが発生する。このようなエラーを修正するためには、セット内の要素を適切な型に変更する。
analyzeUnannotatedFunctions
概要
analyzeUnannotatedFunctions: boolean
analyzeUnannotatedFunctions
は、入力パラメーターや戻り値に型注釈がない関数やメソッドに対して型チェックを行い、潜在的な型エラーを報告するかどうかを決定する設定である。この設定が true
(デフォルト値)の場合、型注釈がない関数やメソッドでも型チェックが行われ、型エラーが検出される可能性がある。false
に設定されている場合、型注釈がない関数やメソッドは型チェックの対象外となるが、型注釈がないこと自体は警告やエラーとして報告されない。
設定値ごとの挙動
-
analyzeUnannotatedFunctions: true
- 型注釈がない関数やメソッドでも型チェックを行い、潜在的な型エラーを報告する。
-
analyzeUnannotatedFunctions: false
- 型注釈がない関数やメソッドは型チェックの対象外となり、警告やエラーは報告されない。
サンプルコード
-
analyzeUnannotatedFunctions: true
の場合def add(a, b): return a + b # 型注釈がなくても、Pyrightはこの関数を分析し、潜在的な型エラーを報告する
-
analyzeUnannotatedFunctions: false
の場合def add(a, b): return a + b # 型注釈がないが、Pyrightはこの関数の型チェックを行わず、警告やエラーも報告しない
型エラーとその解決策
analyzeUnannotatedFunctions
が true
の場合、型注釈がない関数やメソッドで潜在的な型エラーが検出される。ただしこの設定如何によらず型安全性を高めるためには、関数やメソッドに適切な型注釈を追加することが推奨される。
strictParameterNoneValue
概要
strictParameterNoneValue: boolean
strictParameterNoneValue
は、PEP 484に基づいて関数のパラメータがデフォルト値として None
を持つ場合、その型を暗黙的に Optional
とするかどうかを決定する設定である。この設定が true
の場合、明示的に Optional
型をパラメータの型注釈として使用する必要がある。デフォルト値は true
である。
設定値ごとの挙動
-
strictParameterNoneValue: true
- デフォルト値が
None
の関数パラメータには、明示的にOptional
型注釈を使用する。
- デフォルト値が
-
strictParameterNoneValue: false
- デフォルト値が
None
でも、パラメータの型注釈にOptional
を明示的に使用する必要はない。
- デフォルト値が
サンプルコード
-
strictParameterNoneValue: true
の場合def greet(name: str = None): return f"Hello, {name}" # この関数は、nameがNoneを許容するため、型注釈として `Optional[str]` を使用すべき
-
strictParameterNoneValue: false
の場合def greet(name: str = None): return f"Hello, {name}" # Optionalを使用しなくても型エラーは発生しない
型エラーとその解決策
strictParameterNoneValue
が true
の場合、デフォルト値が None
のパラメータには、型注釈として Optional
を明示的に使用する必要がある。そうでないと型エラーが発生する。型エラーを解決するためには、パラメータの型注釈を Optional[型]
に変更する。
- 型エラーを修正するための関数(
Optional
型注釈を追加):from typing import Optional def greet(name: Optional[str] = None): return f"Hello, {name}" # `Optional[str]` を使用して、nameが `str` 型か `None` かを明示する
enableTypeIgnoreComments
概要
enableTypeIgnoreComments: boolean
enableTypeIgnoreComments
は、PEP 484で定義された "# type: ignore"
コメントのサポートを有効化または無効化する設定である。このコメントは、特定の行の型チェックを無視するために使用される。この設定が true
の場合、"# type: ignore"
コメントが有効となり、Pyrightはこれらのコメントがある行の型チェックを行わない。デフォルト値は true
である。この設定は "# pyright: ignore"
コメントには影響しない。
設定値ごとの挙動
-
enableTypeIgnoreComments: true
"# type: ignore"
コメントが有効であり、これらのコメントがある行の型チェックは無視される。
-
enableTypeIgnoreComments: false
"# type: ignore"
コメントは無効であり、コメントがあっても型チェックは行われる。
サンプルコード
-
enableTypeIgnoreComments: true
の場合a: int = "this is a string" # type: ignore # この行は型チェックから除外される
-
enableTypeIgnoreComments: false
の場合a: int = "this is a string" # type: ignore # このコメントは無視され、型エラーが報告される
型エラーとその解決策
enableTypeIgnoreComments
が true
の場合、"# type: ignore"
コメントがある行は型チェックから除外されるため、型エラーは発生しない。false
の場合、これらのコメントは無効となり、通常通り型エラーが報告される。したがって、ignoreができないときには脱出口的にこの機能を使うのではなく、自身で型が合うようにコードを修正する必要がある。
deprecateTypingAliases
概要
deprecateTypingAliases: boolean
deprecateTypingAliases
は、PEP 585に基づき、Python 3.9以降で標準コレクションの型に対するエイリアスが非推奨とされるかどうかを制御する設定である。Python 3.9以降では、ジェネリクスをサポートするために導入された typing
モジュールの型エイリアス(例えば typing.List
代わりに list
)が非推奨となる。この設定はPython 3.9以降でのみ適用される。デフォルト値は false
だが、将来的に true
に変更される可能性がある。
設定値ごとの挙動
-
deprecateTypingAliases: true
- Python 3.9以降で
typing
モジュールの型エイリアスは非推奨と扱われる。
- Python 3.9以降で
-
deprecateTypingAliases: false
- Python 3.9以降でも
typing
モジュールの型エイリアスは非推奨とは扱われない。
- Python 3.9以降でも
サンプルコード
-
deprecateTypingAliases: true
の場合from typing import List a: List[int] = [1, 2, 3] # List[int] は非推奨として扱われる
-
deprecateTypingAliases: false
の場合from typing import List a: List[int] = [1, 2, 3] # List[int] は非推奨として扱われない
型エラーとその解決策
deprecateTypingAliases
が true
の場合、非推奨とされる typing
モジュールの型エイリアスを使用すると警告が出る可能性がある。これを解決するには、Python 3.9以降の標準コレクションの型(list
, dict
, set
など)を直接使用する。
- 非推奨の型エイリアスを修正するためのサンプルコード:
a: list[int] = [1, 2, 3] # Python 3.9以降では list[int] が推奨される
enableExperimentalFeatures
概要
enableExperimentalFeatures: boolean
enableExperimentalFeatures
は、Pythonの型付け標準に対する提案されたり探索的な変更に対応する、実験的な(主に未文書化の)機能群を有効化するかどうかを制御する設定である。これらの機能は将来的に変更されたり削除される可能性が高いため、実験目的以外での使用は推奨されない。デフォルト値は false
である。
設定値ごとの挙動
-
enableExperimentalFeatures: true
- 実験的な機能が有効化される。これらの機能は未文書化であり、将来的に変更される可能性がある。
-
enableExperimentalFeatures: false
- 実験的な機能は無効化される。
サンプルコード
enableExperimentalFeatures
が true
または false
の場合の具体的なサンプルコードは提供できない。これは、実験的な機能が主に未文書化であり、その具体的な挙動が明確に定義されていないためである。この設定は主に開発者が新しい型付け機能を試すために使用される。
実験的な機能の使用に関する注意
enableExperimentalFeatures
を true
に設定する場合は、その機能が実験的であり、将来的に変更される可能性があることを理解し、実験目的以外での使用は控えるべきである。安定したアプリケーションやライブラリでの使用は推奨されない。
disableBytesTypePromotions
概要
disableBytesTypePromotions: boolean
disableBytesTypePromotions
は、bytearray
と memoryview
が bytes
のサブタイプと見なされるという従来の挙動を無効化する設定である。PEP 688では、この挙動が非推奨とされているが、このスイッチを使用することで、古い挙動を復元できる。デフォルト値は false
である。
設定値ごとの挙動
-
disableBytesTypePromotions: true
bytearray
とmemoryview
がbytes
のサブタイプとして扱われる従来の挙動を無効化する。
-
disableBytesTypePromotions: false
bytearray
とmemoryview
はbytes
のサブタイプとして扱われる。
サンプルコード
-
disableBytesTypePromotions: true
の場合a: bytes = bytearray(b"example") # `bytearray` は `bytes` のサブタイプとして扱われないため、型エラーが発生する
-
disableBytesTypePromotions: false
の場合a: bytes = bytearray(b"example") # `bytearray` は `bytes` のサブタイプとして扱われるため、型エラーは発生しない
型エラーとその解決策
disableBytesTypePromotions
が true
の場合、bytearray
や memoryview
を bytes
型として扱うと型エラーが発生する。これを解決するには、変数の型を bytearray
や memoryview
など、実際の型に合わせて変更する必要がある。
reportPropertyTypeMismatch
概要
reportPropertyTypeMismatch: boolean or string
reportPropertyTypeMismatch
は、セッターに渡された値の型がゲッターによって返された値の型に割り当てられない場合の診断を生成または抑制する設定である。このような不一致は、プロパティの意図された使用法に反する。プロパティは変数のように振る舞うことが意図されている。デフォルト値は "none"
である。
設定値ごとの挙動
-
reportPropertyTypeMismatch: true
or"error"
- セッターとゲッターの型不一致に対して診断を生成する。
-
reportPropertyTypeMismatch: false
or"none"
- セッターとゲッターの型不一致に対する診断を抑制する。
サンプルコード
-
reportPropertyTypeMismatch: true
の場合class Example: @property def value(self) -> int: return 42 @value.setter def value(self, v: str): pass # セッターの型(str)がゲッターの型(int)と一致しないため、型エラーが報告される
-
reportPropertyTypeMismatch: false
の場合class Example: @property def value(self) -> int: return 42 @value.setter def value(self, v: str): pass # 型不一致の診断は抑制される
型エラーとその解決策
reportPropertyTypeMismatch
が true
または "error"
の場合、セッターの型とゲッターの型が一致しないと型エラーが報告される。このエラーを解決するには、セッターとゲッターの型を一致させる必要がある。
- 型エラーを修正するためのサンプルコード:
class Example: @property def value(self) -> int: return 42 @value.setter def value(self, v: int): pass # セッターとゲッターの型が一致しているため、型エラーは発生しない
reportFunctionMemberAccess
概要
reportFunctionMemberAccess: boolean or string
reportFunctionMemberAccess
は、関数に対する非標準メンバーアクセスに関する診断を生成または抑制する設定である。非標準メンバーアクセスとは、関数オブジェクトに対して通常想定されていない属性やメソッドへのアクセスを指す。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportFunctionMemberAccess: true
or"error"
- 関数に対する非標準メンバーアクセスに対してエラーを生成する。
-
reportFunctionMemberAccess: false
or"none"
- 関数に対する非標準メンバーアクセスの診断を抑制する。
サンプルコード
-
reportFunctionMemberAccess: true
の場合def example_function(): pass print(example_function.fake_attribute) # 非標準のメンバーアクセスに対してエラーが生成される
-
reportFunctionMemberAccess: false
の場合def example_function(): pass print(example_function.fake_attribute) # 非標準のメンバーアクセスに対する診断は抑制される
型エラーとその解決策
reportFunctionMemberAccess
が true
または "error"
の場合、関数に対する非標準メンバーアクセスによって型エラーが報告される。このエラーを解決するには、関数オブジェクトに対する不適切なメンバーアクセスを避ける必要がある。
reportMissingImports
概要
reportMissingImports: boolean or string
reportMissingImports
は、対応するインポートされたPythonファイルや型スタブファイルが存在しないインポートに対する診断を生成または抑制する設定である。この設定は、存在しないモジュールをインポートしようとした場合にエラーを生成するかどうかを決定する。デフォルト値は "error"
である。
設定値ごとの挙動
-
reportMissingImports: true
or"error"
- 対応するファイルが存在しないインポートに対してエラーを生成する。
-
reportMissingImports: false
or"none"
- 対応するファイルが存在しないインポートの診断を抑制する。
サンプルコード
-
reportMissingImports: true
の場合import nonexistent_module # nonexistent_module が存在しないため、エラーが生成される
-
reportMissingImports: false
の場合import nonexistent_module # 対応するファイルが存在しないインポートに対するエラーは抑制される
型エラーとその解決策
reportMissingImports
が true
または "error"
の場合、存在しないモジュールのインポートによって型エラーが報告される。このエラーを解決するには、正しいモジュール名を使用するか、必要なファイルがプロジェクト内に存在することを確認する必要がある。または、依存関係が正しくインストールされていることを確認する。
reportMissingModuleSource
概要
reportMissingModuleSource: boolean or string
reportMissingModuleSource
は、インポートされたモジュールに対応するソースファイルが存在しない場合の診断を生成または抑制する設定である。これは、型スタブが見つかったが、モジュールのソースファイルが見つからない場合に発生する。これは、実行環境を使用して実行時にコードが失敗する可能性があることを示している。型チェックは型スタブを使用して行われる。デフォルト値は "warning"
である。
設定値ごとの挙動
-
reportMissingModuleSource: true
or"error"
- 対応するソースファイルがないインポートに対してエラーを生成する。
-
reportMissingModuleSource: false
or"none"
- 対応するソースファイルがないインポートの診断を抑制する。
サンプルコード
-
reportMissingModuleSource: "warning"
の場合import some_module # some_module のソースファイルが見つからないが、型スタブは見つかるため、警告が生成される
-
reportMissingModuleSource: false
の場合import some_module # ソースファイルが見つからないインポートに対する警告やエラーは抑制される
型エラーとその解決策
reportMissingModuleSource
が true
、"error"
、または "warning"
の場合、対応するソースファイルがないインポートに対して警告またはエラーが報告される。この問題を解決するには、モジュールのソースファイルが存在することを確認するか、依存関係が正しくインストールされていることを確認する。または、必要に応じて型スタブのみを使用することを検討する。
reportMissingTypeStubs
概要
reportMissingTypeStubs: boolean or string
reportMissingTypeStubs
は、対応する型スタブファイル(typeshedファイルまたはカスタム型スタブ)がないインポートに関する診断を生成または抑制する設定である。型チェッカーは、最適な分析を行うために型スタブを必要とする。デフォルト値は "none"
である。この診断には、編集体験を向上させるためにカスタム型スタブを生成するための対応するクイックフィックスがあることに注意。
設定値ごとの挙動
-
reportMissingTypeStubs: true
or"error"
- 対応する型スタブがないインポートに対してエラーを生成する。
-
reportMissingTypeStubs: false
or"none"
- 対応する型スタブがないインポートの診断を抑制する。
サンプルコード
-
reportMissingTypeStubs: "warning"
の場合import some_module # some_module の型スタブが見つからないため、警告が生成される
-
reportMissingTypeStubs: false
の場合import some_module # 型スタブが見つからないインポートに対する警告やエラーは抑制される
型エラーとその解決策
reportMissingTypeStubs
が true
、"error"
、または "warning"
の場合、対応する型スタブがないインポートに対して警告またはエラーが報告される。この問題を解決するには、必要な型スタブファイルをプロジェクトに追加するか、型スタブを生成する。または、型スタブが必要ない場合は、この設定を "none"
または false
に設定して診断を抑制する。
reportImportCycles
概要
reportImportCycles: boolean or string
reportImportCycles
は、循環インポートチェーンに関する診断を生成または抑制する設定である。Pythonでは循環インポートはエラーではないが、型分析の速度を低下させ、アーキテクチャの層の問題を示唆することが多い。一般的に、これらは避けるべきである。デフォルト値は "none"
であり、この設定では、typeshedの標準ライブラリ型スタブファイルにあるインポートサイクルは無視される。
設定値ごとの挙動
-
reportImportCycles: true
or"error"
- 循環インポートチェーンに対してエラーを生成する。
-
reportImportCycles: false
or"none"
- 循環インポートチェーンの診断を抑制する。
サンプルコード
-
reportImportCycles: true
or"error"
の場合# file1.py from .file2 import some_function # file2.py from .file1 import another_function # 循環インポートが存在するため、エラーが生成される
-
reportImportCycles: false
or"none"
の場合# file1.py from .file2 import some_function # file2.py from .file1 import another_function # 循環インポートに対する警告やエラーは抑制される
型エラーとその解決策
reportImportCycles
が true
または "error"
の場合、循環インポートに対してエラーが報告される。この問題を解決するには、インポートの構造を変更して循環依存を避けるか、必要に応じてモジュールを再設計する。
reportUnusedImport
概要
reportUnusedImport: boolean or string
reportUnusedImport
は、そのファイル内で参照されていないインポートされたシンボルに関する診断を生成または抑制する設定である。この設定は、使用されていないインポートに対する警告やエラーを管理するために使用される。デフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnusedImport: true
or"error"
- 使用されていないインポートに対してエラーを生成する。
-
reportUnusedImport: false
or"none"
- 使用されていないインポートの診断を抑制する。
サンプルコード
-
reportUnusedImport: true
or"error"
の場合import some_module # some_module はこのファイル内で使用されていないため、エラーが生成される
-
reportUnusedImport: false
or"none"
の場合import some_module # 使用されていないインポートに対する警告やエラーは抑制される
型エラーとその解決策
reportUnusedImport
が true
または "error"
の場合、使用されていないインポートに対してエラーが報告される。この問題を解決するには、使用されていないインポートをファイルから削除する。
reportUnusedClass
概要
reportUnusedClass: boolean or string
reportUnusedClass
は、プライベート名(アンダースコアで始まる名前)を持つクラスがアクセスされていない場合の診断を生成または抑制する設定である。この設定は、使用されていないプライベートクラスに対する警告やエラーを管理するために使用される。デフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnusedClass: true
or"error"
- 使用されていないプライベートクラスに対してエラーを生成する。
-
reportUnusedClass: false
or"none"
- 使用されていないプライベートクラスの診断を抑制する。
サンプルコード
-
reportUnusedClass: true
or"error"
の場合class _UnusedClass: pass # _UnusedClass はこのファイル内で使用されていないため、エラーが生成される
-
reportUnusedClass: false
or"none"
の場合class _UnusedClass: pass # 使用されていないプライベートクラスに対する警告やエラーは抑制される
型エラーとその解決策
reportUnusedClass
が true
または "error"
の場合、使用されていないプライベートクラスに対してエラーが報告される。この問題を解決するには、使用されていないプライベートクラスをファイルから削除するか、必要に応じてそのクラスを使用する。
reportUnusedFunction
概要
reportUnusedFunction: boolean or string
reportUnusedFunction
は、プライベート名(アンダースコアで始まる名前)を持つ関数やメソッドがアクセスされていない場合の診断を生成または抑制する設定である。この設定は、使用されていないプライベート関数やメソッドに対する警告やエラーを管理するために使用される。デフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnusedFunction: true
or"error"
- 使用されていないプライベート関数やメソッドに対してエラーを生成する。
-
reportUnusedFunction: false
or"none"
- 使用されていないプライベート関数やメソッドの診断を抑制する。
サンプルコード
-
reportUnusedFunction: true
or"error"
の場合def _unused_function(): pass # _unused_function はこのファイル内で使用されていないため、エラーが生成される
-
reportUnusedFunction: false
or"none"
の場合def _unused_function(): pass # 使用されていないプライベート関数やメソッドに対する警告やエラーは抑制される
型エラーとその解決策
reportUnusedFunction
が true
または "error"
の場合、使用されていないプライベート関数やメソッドに対してエラーが報告される。この問題を解決するには、使用されていないプライベート関数やメソッドをファイルから削除するか、必要に応じてその関数やメソッドを使用する。
reportUnusedVariable
概要
reportUnusedVariable: boolean or string
reportUnusedVariable
は、アクセスされていない変数に関する診断を生成または抑制する設定である。この設定は、使用されていない変数に対する警告やエラーを管理するために使用される。デフォルト値は "none"
であり、アンダースコアで始まる名前を持つ変数はこのチェックから免除される。
設定値ごとの挙動
-
reportUnusedVariable: true
or"error"
- 使用されていない変数に対してエラーを生成する。
-
reportUnusedVariable: false
or"none"
- 使用されていない変数の診断を抑制する。
サンプルコード
-
reportUnusedVariable: true
or"error"
の場合unused_var = 42 # unused_var はこのファイル内で使用されていないため、エラーが生成される
-
reportUnusedVariable: false
or"none"
の場合unused_var = 42 # 使用されていない変数に対する警告やエラーは抑制される
型エラーとその解決策
reportUnusedVariable
が true
または "error"
の場合、使用されていない変数に対してエラーが報告される。この問題を解決するには、使用されていない変数をファイルから削除するか、必要に応じてその変数を使用する。アンダースコアで始まる変数はこのチェックの対象外である。
reportDuplicateImport
概要
reportDuplicateImport: boolean or string
reportDuplicateImport
は、同一のシンボルまたはモジュールが複数回インポートされた場合の診断を生成または抑制する設定である。この設定は、重複したインポートに対する警告やエラーを管理するために使用される。デフォルト値は "none"
である。
設定値ごとの挙動
-
reportDuplicateImport: true
or"error"
- 同一のシンボルまたはモジュールが複数回インポートされた場合にエラーを生成する。
-
reportDuplicateImport: false
or"none"
- 重複したインポートの診断を抑制する。
サンプルコード
-
reportDuplicateImport: true
or"error"
の場合import os import os # 重複したインポート # os モジュールが複数回インポートされているため、エラーが生成される
-
reportDuplicateImport: false
or"none"
の場合import os import os # 重複したインポート # 重複したインポートに対する警告やエラーは抑制される
型エラーとその解決策
reportDuplicateImport
が true
または "error"
の場合、重複したインポートに対してエラーが報告される。この問題を解決するには、重複したインポートを削除する。
reportWildcardImportFromLibrary
概要
reportWildcardImportFromLibrary: boolean or string
reportWildcardImportFromLibrary
は、外部ライブラリからのワイルドカードインポート(from some_module import *
の形式)に関する診断を生成または抑制する設定である。このような言語機能の使用は強く非推奨であり、ライブラリが更新された際にバグを引き起こす可能性がある。デフォルト値は "warning"
である。
設定値ごとの挙動
-
reportWildcardImportFromLibrary: true
or"error"
- 外部ライブラリからのワイルドカードインポートに対してエラーを生成する。
-
reportWildcardImportFromLibrary: false
or"none"
- 外部ライブラリからのワイルドカードインポートの診断を抑制する。
サンプルコード
-
reportWildcardImportFromLibrary: "warning"
の場合from some_external_library import * # 外部ライブラリからのワイルドカードインポートに対して警告が生成される
-
reportWildcardImportFromLibrary: false
or"none"
の場合from some_external_library import * # ワイルドカードインポートに対する警告やエラーは抑制される
型エラーとその解決策
reportWildcardImportFromLibrary
が true
、"error"
、または "warning"
の場合、外部ライブラリからのワイルドカードインポートに対して警告またはエラーが報告される。この問題を解決するには、ワイルドカードインポートを避け、必要なシンボルを明示的にインポートする。これにより、コードの明確さと保守性が向上し、将来のライブラリ更新時の潜在的な問題を回避できる。
reportOptionalSubscript
概要
reportOptionalSubscript: boolean or string
reportOptionalSubscript
は、Optional
型の変数をサブスクリプト(インデックスアクセス)しようとする試みに関する診断を生成または抑制する設定である。Optional
型の変数は None
である可能性があり、サブスクリプト操作は TypeError
を引き起こす可能性がある。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportOptionalSubscript: true
or"error"
Optional
型の変数のサブスクリプト操作に対してエラーを生成する。
-
reportOptionalSubscript: false
or"none"
Optional
型の変数のサブスクリプト操作の診断を抑制する。
サンプルコード
-
reportOptionalSubscript: true
or"error"
の場合from typing import Optional def get_item(optional_list: Optional[list], index: int): return optional_list[index] # optional_list が None の場合、エラーが生成される
-
reportOptionalSubscript: false
or"none"
の場合from typing import Optional def get_item(optional_list: Optional[list], index: int): return optional_list[index] # `Optional` 型の変数のサブスクリプト操作に対するエラーは抑制される
型エラーとその解決策
reportOptionalSubscript
が true
または "error"
の場合、Optional
型の変数のサブスクリプト操作に対してエラーが報告される。この問題を解決するには、変数が None
でないことを確認するか、Optional
型を避ける必要がある。
- 型エラーを修正するためのサンプルコード:
from typing import Optional def get_item(optional_list: Optional[list], index: int): if optional_list is not None: return optional_list[index] else: return None # `Optional` 型の変数が `None` でないことを確認してからサブスクリプト操作を行う
reportOptionalMemberAccess
概要
reportOptionalMemberAccess: boolean or string
reportOptionalMemberAccess
は、Optional
型の変数のメンバーにアクセスしようとする試みに関する診断を生成または抑制する設定である。Optional
型の変数は None
である可能性があり、メンバーアクセスは AttributeError
を引き起こす可能性がある。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportOptionalMemberAccess: true
or"error"
Optional
型の変数のメンバーアクセスに対してエラーを生成する。
-
reportOptionalMemberAccess: false
or"none"
Optional
型の変数のメンバーアクセス操作の診断を抑制する。
サンプルコード
-
reportOptionalMemberAccess: true
or"error"
の場合from typing import Optional class MyClass: def method(self): pass def access_member(optional_object: Optional[MyClass]): optional_object.method() # optional_object が None の場合、エラーが生成される
-
reportOptionalMemberAccess: false
or"none"
の場合from typing import Optional class MyClass: def method(self): pass def access_member(optional_object: Optional[MyClass]): optional_object.method() # `Optional` 型の変数のメンバーアクセスに対するエラーは抑制される
型エラーとその解決策
reportOptionalMemberAccess
が true
または "error"
の場合、Optional
型の変数のメンバーアクセスに対してエラーが報告される。この問題を解決するには、変数が None
でないことを確認するか、Optional
型を避ける必要がある。
- 型エラーを修正するためのサンプルコード:
from typing import Optional class MyClass: def method(self): pass def access_member(optional_object: Optional[MyClass]): if optional_object is not None: optional_object.method() else: # 適切な処理またはエラーハンドリング pass # `Optional` 型の変数が `None` でないことを確認してからメンバーアクセスを行う
reportOptionalCall
概要
reportOptionalCall: boolean or string
reportOptionalCall
は、Optional
型の変数を呼び出そうとする試み(関数やメソッドとして)に関する診断を生成または抑制する設定である。Optional
型の変数は None
である可能性があり、呼び出しは TypeError
を引き起こす可能性がある。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportOptionalCall: true
or"error"
Optional
型の変数の呼び出しに対してエラーを生成する。
-
reportOptionalCall: false
or"none"
Optional
型の変数の呼び出し操作の診断を抑制する。
サンプルコード
-
reportOptionalCall: true
or"error"
の場合from typing import Optional def maybe_callable() -> Optional[callable]: # 何らかの条件に基づいて callable または None を返す pass optional_func = maybe_callable() optional_func() # optional_func が None の場合、エラーが生成される
-
reportOptionalCall: false
or"none"
の場合from typing import Optional def maybe_callable() -> Optional[callable]: pass optional_func = maybe_callable() optional_func() # `Optional` 型の変数の呼び出しに対するエラーは抑制される
型エラーとその解決策
reportOptionalCall
が true
または "error"
の場合、Optional
型の変数の呼び出しに対してエラーが報告される。この問題を解決するには、変数が None
でないことを確認するか、Optional
型を避ける必要がある。
- 型エラーを修正するためのサンプルコード:
from typing import Optional def maybe_callable() -> Optional[callable]: pass optional_func = maybe_callable() if optional_func is not None: optional_func() else: # 適切な処理またはエラーハンドリング pass # `Optional` 型の変数が `None` でないことを確認してから呼び出しを行う
reportOptionalIterable
概要
reportOptionalIterable: boolean or string
reportOptionalIterable
は、Optional
型の変数をイテラブル値として使用しようとする試み(例えば for
文内で)に関する診断を生成または抑制する設定である。Optional
型の変数は None
である可能性があり、イテレーションは TypeError
を引き起こす可能性がある。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportOptionalIterable: true
or"error"
Optional
型の変数をイテラブルとして使用しようとする際にエラーを生成する。
-
reportOptionalIterable: false
or"none"
Optional
型の変数をイテラブルとして使用する操作の診断を抑制する。
サンプルコード
-
reportOptionalIterable: true
or"error"
の場合from typing import Optional def get_optional_iterable() -> Optional[Iterable]: # 何らかの条件に基づいて Iterable または None を返す pass optional_iterable = get_optional_iterable() for item in optional_iterable: pass # optional_iterable が None の場合、エラーが生成される
-
reportOptionalIterable: false
or"none"
の場合from typing import Optional def get_optional_iterable() -> Optional[Iterable]: pass optional_iterable = get_optional_iterable() for item in optional_iterable: pass # `Optional` 型の変数をイテラブルとして使用する操作に対するエラーは抑制される
型エラーとその解決策
reportOptionalIterable
が true
または "error"
の場合、Optional
型の変数をイテラブルとして使用しようとする際にエラーが報告される。この問題を解決するには、変数が None
でないことを確認するか、Optional
型を避ける必要がある。
- 型エラーを修正するためのサンプルコード:
from typing import Optional def get_optional_iterable() -> Optional[Iterable]: pass optional_iterable = get_optional_iterable() if optional_iterable is not None: for item in optional_iterable: pass else: # 適切な処理またはエラーハンドリング pass # `Optional` 型の変数が `None` でないことを確認してからイテレーションを行う
reportOptionalContextManager
概要
reportOptionalContextManager: boolean or string
reportOptionalContextManager
は、Optional
型の変数をコンテキストマネージャ(with
文のパラメータとして)として使用しようとする試みに関する診断を生成または抑制する設定である。Optional
型の変数は None
である可能性があり、これをコンテキストマネージャとして使用すると AttributeError
または TypeError
を引き起こす可能性がある。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportOptionalContextManager: true
or"error"
Optional
型の変数をコンテキストマネージャとして使用しようとする際にエラーを生成する。
-
reportOptionalContextManager: false
or"none"
Optional
型の変数をコンテキストマネージャとして使用する操作の診断を抑制する。
サンプルコード
-
reportOptionalContextManager: true
or"error"
の場合from typing import Optional def get_optional_context_manager() -> Optional[ContextManager]: # 何らかの条件に基づいて ContextManager または None を返す pass optional_cm = get_optional_context_manager() with optional_cm: pass # optional_cm が None の場合、エラーが生成される
-
reportOptionalContextManager: false
or"none"
の場合from typing import Optional def get_optional_context_manager() -> Optional[ContextManager]: pass optional_cm = get_optional_context_manager() with optional_cm: pass # `Optional` 型の変数をコンテキストマネージャとして使用する操作に対するエラーは抑制される
型エラーとその解決策
reportOptionalContextManager
が true
または "error"
の場合、Optional
型の変数をコンテキストマネージャとして使用しようとする際にエラーが報告される。この問題を解決するには、変数が None
でないことを確認するか、Optional
型を避ける必要がある。
- 型エラーを修正するためのサンプルコード:
from typing import Optional def get_optional_context_manager() -> Optional[ContextManager]: pass optional_cm = get_optional_context_manager() if optional_cm is not None: with optional_cm: pass else: # 適切な処理またはエラーハンドリング pass # `Optional` 型の変数が `None` でないことを確認してからコンテキストマネージャとして使用する
reportOptionalOperand
概要
reportOptionalOperand: boolean or string
reportOptionalOperand
は、Optional
型の変数を単項演算子(例えば ~
や not
)や二項演算子(例えば *
、==
、or
など)の左辺のオペランドとして使用しようとする試みに関する診断を生成または抑制する設定である。Optional
型の変数は None
である可能性があり、演算子と組み合わせて使用すると予期しない結果やエラーを引き起こす可能性がある。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportOptionalOperand: true
or"error"
Optional
型の変数を演算子のオペランドとして使用しようとする際にエラーを生成する。
-
reportOptionalOperand: false
or"none"
Optional
型の変数を演算子のオペランドとして使用する操作の診断を抑制する。
サンプルコード
-
reportOptionalOperand: true
or"error"
の場合from typing import Optional optional_var: Optional[int] = None result = optional_var * 2 # optional_var が None の場合、エラーが生成される
-
reportOptionalOperand: false
or"none"
の場合from typing import Optional optional_var: Optional[int] = None result = optional_var * 2 # `Optional` 型の変数を演算子のオペランドとして使用する操作に対するエラーは抑制される
型エラーとその解決策
reportOptionalOperand
が true
または "error"
の場合、Optional
型の変数を演算子のオペランドとして使用しようとする際にエラーが報告される。この問題を解決するには、変数が None
でないことを確認するか、Optional
型を避ける必要がある。
- 型エラーを修正するためのサンプルコード:
from typing import Optional optional_var: Optional[int] = None if optional_var is not None: result = optional_var * 2 else: # 適切な処理またはエラーハンドリング pass # `Optional` 型の変数が `None` でないことを確認してから演算子を使用する
reportTypedDictNotRequiredAccess
概要
reportTypedDictNotRequiredAccess: boolean or string
reportTypedDictNotRequiredAccess
は、TypedDict
内の必須でないフィールドにアクセスしようとする試みに対する診断を生成または抑制する設定である。TypedDict
では、特定のフィールドはオプショナル(必須でない)として定義できる。この設定が有効の場合、必須でないフィールドにアクセスする前にその存在を確認しなければエラーが生成される。デフォルト値は "error"
である。
設定値ごとの挙動
-
reportTypedDictNotRequiredAccess: true
or"error"
TypedDict
の必須でないフィールドにアクセスしようとする際にエラーを生成する。
-
reportTypedDictNotRequiredAccess: false
or"none"
TypedDict
の必須でないフィールドへのアクセス操作の診断を抑制する。
サンプルコード
-
reportTypedDictNotRequiredAccess: true
or"error"
の場合from typing import TypedDict, Optional class ExampleDict(TypedDict, total=False): optional_field: Optional[int] example_dict = ExampleDict() value = example_dict['optional_field'] # エラーが生成される
-
reportTypedDictNotRequiredAccess: false
or"none"
の場合from typing import TypedDict, Optional class ExampleDict(TypedDict, total=False): optional_field: Optional[int] example_dict = ExampleDict() value = example_dict['optional_field'] # 診断は抑制される
型エラーとその解決策
reportTypedDictNotRequiredAccess
が true
または "error"
の場合、TypedDict
の必須でないフィールドにアクセスしようとする際にエラーが報告される。この問題を解決するには、フィールドが存在するかどうかを確認する必要がある。
- 型エラーを修正するためのサンプルコード:
from typing import TypedDict, Optional class ExampleDict(TypedDict, total=False): optional_field: Optional[int] example_dict = ExampleDict() if 'optional_field' in example_dict: value = example_dict['optional_field'] else: # フィールドが存在しない場合の適切な処理 pass # `TypedDict` の必須でないフィールドの存在を確認してからアクセスする
reportGeneralTypeIssues
概要
reportGeneralTypeIssues: boolean or string
reportGeneralTypeIssues
は、一般的な型の矛盾、サポートされていない操作、引数やパラメータの不一致などに関する診断を生成または抑制する設定である。この設定は、他のルールによってカバーされていない基本的な型チェックルール全般に適用される。構文エラーは含まれていない。デフォルト値は "error"
である。
設定値ごとの挙動
-
reportGeneralTypeIssues: true
or"error"
- 一般的な型の矛盾やサポートされていない操作などに対してエラーを生成する。
-
reportGeneralTypeIssues: false
or"none"
- 一般的な型の問題に関する診断を抑制する。
サンプルコード
-
reportGeneralTypeIssues: true
or"error"
の場合def add(a: int, b: int) -> int: return a + "10" # 型の矛盾があるためエラーが生成される
-
reportGeneralTypeIssues: false
or"none"
の場合def add(a: int, b: int) -> int: return a + "10" # 一般的な型の問題に関する警告やエラーは抑制される
型エラーとその解決策
reportGeneralTypeIssues
が true
または "error"
の場合、一般的な型の矛盾やサポートされていない操作に対してエラーが報告される。この問題を解決するには、型が一致するようにコードを修正するか、適切な型注釈を追加する。
- 型エラーを修正するためのサンプルコード:
def add(a: int, b: int) -> int: return a + 10 # 型が一致するよう修正されている
reportUntypedNamedTuple
概要
reportUntypedNamedTuple: boolean or string
reportUntypedNamedTuple
は、型情報を含まない namedtuple
の代わりに型情報を含む NamedTuple
の使用に関する診断を生成または抑制する設定である。namedtuple
は古いスタイルのタプルで型情報が含まれていないが、NamedTuple
は型注釈をサポートしており、型安全なプログラミングを促進する。デフォルト値は "none"
である。
設定値ごとの挙動
-
reportUntypedNamedTuple: true
or"error"
namedtuple
の代わりにNamedTuple
を使用しない場合にエラーを生成する。
-
reportUntypedNamedTuple: false
or"none"
namedtuple
とNamedTuple
の使用に関する診断を抑制する。
サンプルコード
-
reportUntypedNamedTuple: true
or"error"
の場合from collections import namedtuple MyTuple = namedtuple('MyTuple', 'field1 field2') # `namedtuple` の使用に対してエラーが生成される
-
reportUntypedNamedTuple: false
or"none"
の場合from collections import namedtuple MyTuple = namedtuple('MyTuple', 'field1 field2') # `namedtuple` の使用に対する警告やエラーは抑制される
型エラーとその解決策
reportUntypedNamedTuple
が true
または "error"
の場合、namedtuple
の代わりに NamedTuple
を使用しない場合にエラーが報告される。この問題を解決するには、namedtuple
の代わりに NamedTuple
を使用し、型情報を含める。
- 型エラーを修正するためのサンプルコード:
from typing import NamedTuple class MyTuple(NamedTuple): field1: int field2: str # `NamedTuple` を使用して型情報を含める
reportPrivateUsage
概要
reportPrivateUsage: boolean or string
reportPrivateUsage
は、プライベートまたはプロテクテッド変数や関数の不適切な使用に関する診断を生成または抑制する設定である。プロテクテッドクラスメンバーは単一のアンダースコア(_
)で始まり、サブクラスからのみアクセスできる。プライベートクラスメンバーは二重アンダースコアで始まるが、末尾には二重アンダースコアがなく、宣言されたクラス内でのみアクセスできる。クラスの外で宣言された変数や関数は、名前が単一または二重アンダースコアで始まる場合、プライベートとみなされ、宣言されたモジュールの外部からはアクセスできない。デフォルト値は "none"
である。
設定値ごとの挙動
-
reportPrivateUsage: true
or"error"
- プライベートまたはプロテクテッド変数や関数の不適切な使用に対してエラーを生成する。
-
reportPrivateUsage: false
or"none"
- プライベートまたはプロテクテッド変数や関数の使用に関する診断を抑制する。
サンプルコード
-
reportPrivateUsage: true
or"error"
の場合class MyClass: def __init__(self): self._protected_var = 42 self.__private_var = 23 obj = MyClass() print(obj._protected_var) # プロテクテッド変数へのアクセス print(obj.__private_var) # プライベート変数への不適切なアクセス、エラーが生成される
-
reportPrivateUsage: false
or"none"
の場合class MyClass: def __init__(self): self._protected_var = 42 self.__private_var = 23 obj = MyClass() print(obj._protected_var) # プロテクテッド変数へのアクセス print(obj.__private_var) # プライベート変数へのアクセス、警告やエラーは抑制される
型エラーとその解決策
reportPrivateUsage
が true
または "error"
の場合、プライベートまたはプロテクテッド変数や関数の不適切な使用に対してエラーが報告される。この問題を解決するには、プライベートメンバーへの外部からのアクセスを避け、適切なアクセス手段(公開メソッドやプロパティを通じたアクセスなど)を使用する。
- 型エラーを修正するためのサンプルコード:
class MyClass: def __init__(self): self._protected_var = 42 self.__private_var = 23 def get_private_var(self): return self.__private_var obj = MyClass() print(obj.get_private_var()) # プライベート変数への適切なアクセス方法 # プライベートメンバーへの直接アクセスを避ける
reportTypeCommentUsage
概要
reportTypeCommentUsage: boolean or string
reportTypeCommentUsage
は、型注釈が文法にサポートされていなかったPython 3.5以前のスタイルである「型コメント」の使用に関する診断を生成または抑制する設定である。Python 3.5では関数の型コメントが、Python 3.6では変数の型コメントが不要になった。将来のPythonバージョンでは、すべての型コメントのサポートが非推奨になる可能性がある。このチェックが有効の場合、指定された言語バージョンとの互換性のために必要でない限り、型コメントの使用を警告する。デフォルト値は "none"
である。
設定値ごとの挙動
-
reportTypeCommentUsage: true
or"error"
- 型コメントの不要な使用に対してエラーを生成する。
-
reportTypeCommentUsage: false
or"none"
- 型コメントの使用に関する診断を抑制する。
サンプルコード
-
reportTypeCommentUsage: true
or"error"
の場合def add(a, b): # type: (int, int) -> int return a + b # 型コメントが使用されているため、エラーが生成される
-
reportTypeCommentUsage: false
or"none"
の場合def add(a, b): # type: (int, int) -> int return a + b # 型コメントの使用に対する警告やエラーは抑制される
型エラーとその解決策
reportTypeCommentUsage
が true
または "error"
の場合、型コメントの不要な使用に対してエラーが報告される。この問題を解決するには、Python 3.5以降のスタイルを使用して、型注釈を直接コード内に記述する。
- 型エラーを修正するためのサンプルコード:
def add(a: int, b: int) -> int: return a + b # 直接コード内に型注釈を記述する
reportConstantRedefinition
概要
reportConstantRedefinition: boolean or string
reportConstantRedefinition
は、全て大文字とアンダースコア、数字で構成された変数名(一般的に定数とみなされる)を再定義しようとする試みに関する診断を生成または抑制する設定である。Pythonでは、全て大文字の変数名は通常、定数として扱われる。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportConstantRedefinition: true
or"error"
- 定数とみなされる変数の再定義に対してエラーを生成する。
-
reportConstantRedefinition: false
or"none"
- 定数の再定義に関する診断を抑制する。
サンプルコード
-
reportConstantRedefinition: true
or"error"
の場合MAX_SIZE = 100 MAX_SIZE = 200 # 再定義、エラーが生成される
-
reportConstantRedefinition: false
or"none"
の場合MAX_SIZE = 100 MAX_SIZE = 200 # 再定義、警告やエラーは抑制される
型エラーとその解決策
reportConstantRedefinition
が true
または "error"
の場合、定数とみなされる変数の再定義に対してエラーが報告される。この問題を解決するには、定数の再定義を避け、必要に応じて異なる変数名を使用する。
- 型エラーを修正するためのサンプルコード:
MAX_SIZE = 100 # MAX_SIZE の再定義を避ける NEW_MAX_SIZE = 200 # 新しい変数名を使用
reportPrivateImportUsage
概要
reportPrivateImportUsage: boolean or string
reportPrivateImportUsage
は、モジュールからエクスポートされることを意図していない(つまり __all__
に含まれていない)シンボルをインポートしようとした場合の診断を生成または抑制する設定である。このようなインポートは、モジュールの内部実装に依存する可能性があり、予期しないエラーや互換性の問題を引き起こす可能性がある。デフォルト値は "error"
である。
設定値ごとの挙動
-
reportPrivateImportUsage: true
or"error"
__all__
に含まれていないシンボルのインポートに対してエラーを生成する。
-
reportPrivateImportUsage: false
or"none"
__all__
に含まれていないシンボルのインポートに関する診断を抑制する。
サンプルコード
-
reportPrivateImportUsage: true
or"error"
の場合# 例: some_モジュールから `__all__` に含まれていないシンボルをインポートする from some_py_typed_module import internal_function # internal_function は `__all__` に含まれていないため、エラーが生成される
-
reportPrivateImportUsage: false
or"none"
の場合from some_py_typed_module import internal_function # `__all__` に含まれていないシンボルのインポートに対する警告やエラーは抑制される
型エラーとその解決策
reportPrivateImportUsage
が true
または "error"
の場合、__all__
に含まれていないシンボルのインポートに対してエラーが報告される。この問題を解決するには、公開されているAPIを使用するか、__all__
に含まれているシンボルのみをインポートする。
- 型エラーを修正するためのサンプルコード:
# 公開されているAPIを使用する from some_py_typed_module import public_function
reportDeprecated
概要
reportDeprecated: boolean or string
reportDeprecated
は、非推奨とマークされているクラスや関数の使用に関する診断を生成または抑制する設定である。非推奨の機能は将来のバージョンで削除される可能性があるため、これらを使用することは避けるべきである。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportDeprecated: true
or"error"
- 非推奨とされるクラスや関数の使用に対してエラーを生成する。
-
reportDeprecated: false
or"none"
- 非推奨のクラスや関数の使用に関する診断を抑制する。
サンプルコード
-
reportDeprecated: true
or"error"
の場合import some_module some_module.deprecated_function() # 非推奨の関数の使用、エラーが生成される
-
reportDeprecated: false
or"none"
の場合import some_module some_module.deprecated_function() # 非推奨の関数の使用、警告やエラーは抑制される
型エラーとその解決策
reportDeprecated
が true
または "error"
の場合、非推奨とされるクラスや関数の使用に対してエラーが報告される。この問題を解決するには、非推奨の機能を使用しないか、代替の現行の機能を使用する。
- 型エラーを修正するためのサンプルコード:
import some_module some_module.current_function() # 非推奨の機能の代わりに現行の機能を使用
reportIncompatibleMethodOverride
概要
reportIncompatibleMethodOverride: boolean or string
reportIncompatibleMethodOverride
は、ベースクラスでの同名メソッドを互換性のない方法でオーバーライドするメソッド(パラメータの数が異なる、パラメータの型が互換性がない、戻り値の型が互換性がないなど)に関する診断を生成または抑制する設定である。メソッドのオーバーライドは、基底クラスのインターフェースを尊重する形で行う必要があり、それに違反すると様々なランタイムエラーが発生する可能性がある。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportIncompatibleMethodOverride: true
or"error"
- ベースクラスのメソッドを互換性のない方法でオーバーライドするメソッドに対してエラーを生成する。
-
reportIncompatibleMethodOverride: false
or"none"
- 互換性のない方法でのメソッドオーバーライドに関する診断を抑制する。
サンプルコード
-
reportIncompatibleMethodOverride: true
or"error"
の場合class BaseClass: def method(self, param: int) -> str: return str(param) class SubClass(BaseClass): def method(self, param: str) -> int: # オーバーライドが互換性がない return int(param) # SubClass の method が BaseClass の method と互換性がないため、エラーが生成される
-
reportIncompatibleMethodOverride: false
or"none"
の場合class BaseClass: def method(self, param: int) -> str: return str(param) class SubClass(BaseClass): def method(self, param: str) -> int: return int(param) # 互換性のないメソッドオーバーライドに対する警告やエラーは抑制される
型エラーとその解決策
reportIncompatibleMethodOverride
が true
または "error"
の場合、互換性のない方法でメソッドをオーバーライドするとエラーが報告される。この問題を解決するには、ベースクラスのメソッドと同じシグネチャ(パラメータの数と型、戻り値の型)でメソッドをオーバーライドする。
- 型エラーを修正するためのサンプルコード:
class BaseClass: def method(self, param: int) -> str: return str(param) class SubClass(BaseClass): def method(self, param: int) -> str: return super().method(param) # SubClass の method が BaseClass の method と互換性があるように修正されている
reportIncompatibleVariableOverride
概要
reportIncompatibleVariableOverride: boolean or string
reportIncompatibleVariableOverride
は、ベースクラスで同名のシンボルが持つ型と互換性のない型でクラス変数をオーバーライドしようとする際の診断を生成または抑制する設定である。これは、クラス継承の際に基底クラスで定義された変数の型と派生クラスでの変数の型が異なる場合に発生する。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportIncompatibleVariableOverride: true
or"error"
- ベースクラスのシンボルと互換性のない型でクラス変数をオーバーライドする際にエラーを生成する。
-
reportIncompatibleVariableOverride: false
or"none"
- 互換性のない型でのクラス変数オーバーライドに関する診断を抑制する。
サンプルコード
-
reportIncompatibleVariableOverride: true
or"error"
の場合class BaseClass: var: int = 5 class SubClass(BaseClass): var: str = "hello" # ベースクラスの型と互換性がない # SubClass で var が BaseClass の var と互換性がないため、エラーが生成される
-
reportIncompatibleVariableOverride: false
or"none"
の場合class BaseClass: var: int = 5 class SubClass(BaseClass): var: str = "hello" # 互換性のない型でのクラス変数オーバーライドに対する警告やエラーは抑制される
型エラーとその解決策
reportIncompatibleVariableOverride
が true
または "error"
の場合、互換性のない型でクラス変数をオーバーライドするとエラーが報告される。この問題を解決するには、ベースクラスで定義された変数と同じ型を派生クラスで使用するか、変数名を変更して新しい変数を定義する。
- 型エラーを修正するためのサンプルコード:
class BaseClass: var: int = 5 class SubClass(BaseClass): var: int = 10 # BaseClass の var と同じ型を使用 # SubClass の var が BaseClass の var と互換性があるように修正されている
reportInconsistentConstructor
概要
reportInconsistentConstructor: boolean or string
reportInconsistentConstructor
は、__init__
メソッドのシグネチャが __new__
メソッドのシグネチャと矛盾している場合の診断を生成または抑制する設定である。Pythonでは、__new__
メソッドはクラスのインスタンスを生成し、__init__
メソッドはそのインスタンスを初期化するため、両者のシグネチャが整合性を持つことが望ましい。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportInconsistentConstructor: true
or"error"
__init__
と__new__
のシグネチャが一致しない場合にエラーを生成する。
-
reportInconsistentConstructor: false
or"none"
__init__
と__new__
のシグネチャの不一致に関する診断を抑制する。
サンプルコード
-
reportInconsistentConstructor: true
or"error"
の場合class MyClass: def __new__(cls, arg1, arg2): return super().__new__(cls) def __init__(self, arg1): self.arg1 = arg1 # __new__ と __init__ のシグネチャが一致しないため、エラーが生成される
-
reportInconsistentConstructor: false
or"none"
の場合class MyClass: def __new__(cls, arg1, arg2): return super().__new__(cls) def __init__(self, arg1): self.arg1 = arg1 # __new__ と __init__ のシグネチャの不一致に対する警告やエラーは抑制される
型エラーとその解決策
reportInconsistentConstructor
が true
または "error"
の場合、__init__
と __new__
のシグネチャが一致しないとエラーが報告される。この問題を解決するには、__init__
と __new__
の両方のメソッドが同じ引数を受け取るように修正する。
- 型エラーを修正するためのサンプルコード:
class MyClass: def __new__(cls, arg1, arg2): return super().__new__(cls) def __init__(self, arg1, arg2): self.arg1 = arg1 self.arg2 = arg2 # __new__ と __init__ のシグネチャが一致するように修正されている
reportOverlappingOverload
概要
reportOverlappingOverload: boolean or string
reportOverlappingOverload
は、シグネチャが重複しており、互いにオーバーラップするか、または戻り値の型が互換性がない関数のオーバーロードに関する診断を生成または抑制する設定である。オーバーロードされた関数がシグネチャで重複すると、期待される挙動と異なる結果を引き起こす可能性があり、型安全性に影響を与える。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportOverlappingOverload: true
or"error"
- シグネチャが重複するオーバーロードに対してエラーを生成する。
-
reportOverlappingOverload: false
or"none"
- シグネチャが重複するオーバーロードの診断を抑制する。
サンプルコード
-
reportOverlappingOverload: true
or"error"
の場合from typing import overload class Example: @overload def method(self, param: str) -> int: pass @overload def method(self, param: str) -> str: pass def method(self, param): if isinstance(param, int): return param * 2 elif isinstance(param, str): return param * 2 # method のオーバーロードがシグネチャで重複するため、エラーが生成される可能性がある
-
reportOverlappingOverload: false
or"none"
の場合from typing import overload class Example: # 省略... # シグネチャが重複するオーバーロードに対する警告やエラーは抑制される
型エラーとその解決策
reportOverlappingOverload
が true
または "error"
の場合、シグネチャが重複するオーバーロードに対してエラーが報告される。この問題を解決するには、オーバーロードされた各メソッドが明確に区別されるシグネチャを持つように修正する。
- 型エラーを修正するためのサンプルコード:
from typing import overload class Example: @overload def method(self, param: int) -> int: pass @overload def method(self, param: str) -> str: pass def method(self, param): # 適切な型チェックと処理 pass # オーバーロードされたメソッドが区別されるように修正されている
reportMissingSuperCall
概要
reportMissingSuperCall: boolean or string
reportMissingSuperCall
は、サブクラス内の __init__
、__init_subclass__
、__enter__
、__exit__
メソッドがベースクラスの同名メソッドへの呼び出しを行っていない場合の診断を生成または抑制する設定である。これらのメソッドは、継承されたクラスの機能を正しく利用するために、しばしば基底クラスの同名メソッドを呼び出す必要がある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportMissingSuperCall: true
or"error"
- 基底クラスの同名メソッドへの呼び出しが欠けている場合にエラーを生成する。
-
reportMissingSuperCall: false
or"none"
- 基底クラスの同名メソッドへの呼び出しの欠如に関する診断を抑制する。
サンプルコード
-
reportMissingSuperCall: true
or"error"
の場合class BaseClass: def __init__(self): print("BaseClass __init__") class SubClass(BaseClass): def __init__(self): # super().__init__() の呼び出しが欠けている print("SubClass __init__") # SubClass の __init__ が BaseClass の __init__ を呼び出していないため、エラーが生成される
-
reportMissingSuperCall: false
or"none"
の場合class BaseClass: # ... class SubClass(BaseClass): # ... # 基底クラスの同名メソッドへの呼び出しの欠如に対する警告やエラーは抑制される
型エラーとその解決策
reportMissingSuperCall
が true
または "error"
の場合、基底クラスの同名メソッドへの呼び出しが欠けているとエラーが報告される。この問題を解決するには、適切なタイミングで基底クラスのメソッドを呼び出す。
- 型エラーを修正するためのサンプルコード:
class BaseClass: # ... class SubClass(BaseClass): def __init__(self): super().__init__() # BaseClass の __init__ を呼び出す print("SubClass __init__") # SubClass の __init__ が BaseClass の __init__ を適切に呼び出している