Pyright(Pylance)のtype check ruleの設定全部解説する: その2

 
0
このエントリーをはてなブックマークに追加
Kazuki Moriyama
Kazuki Moriyama (森山 和樹)

その1はこちら

https://kdotdev.com/kdotdev/pyright-pylance-type-check-rule

各ルール解説

reportUninitializedInstanceVariable

概要

reportUninitializedInstanceVariable: boolean or string

reportUninitializedInstanceVariable は、クラス内のインスタンス変数がクラス本体や __init__ メソッド内で初期化されていない、または宣言されていない場合の診断を生成または抑制する設定である。インスタンス変数は通常、クラスの初期化時に設定されることが望ましい。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUninitializedInstanceVariable: true or "error"

    • 初期化されていない、または宣言されていないインスタンス変数に対してエラーを生成する。
  • reportUninitializedInstanceVariable: false or "none"

    • 初期化されていない、または宣言されていないインスタンス変数に関する診断を抑制する。

サンプルコード

  • reportUninitializedInstanceVariable: true or "error" の場合
    class MyClass:
      def __init__(self):
          self.initialized_var = 10
          # self.uninitialized_var は初期化されていない
    
      def set_uninitialized_var(self):
          self.uninitialized_var = 20
    

```

  • reportUninitializedInstanceVariable: false or "none" の場合
    class MyClass:
        # ...
    
    # 初期化されていない、または宣言されていないインスタンス変数に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUninitializedInstanceVariabletrue または "error" の場合、初期化されていない、または宣言されていないインスタンス変数に対してエラーが報告される。この問題を解決するには、インスタンス変数を適切に初期化するか、必要に応じて宣言する。

  • 型エラーを修正するためのサンプルコード:
    class MyClass:
        def __init__(self):
            self.initialized_var = 10
            self.uninitialized_var = None  # 初期化する
    
        def set_uninitialized_var(self):
            self.uninitialized_var = 20
    

reportInvalidStringEscapeSequence

概要

reportInvalidStringEscapeSequence: boolean or string

reportInvalidStringEscapeSequence は、文字列リテラル内で使用される無効なエスケープシーケンスに関する診断を生成または抑制する設定である。Pythonの仕様では、無効なエスケープシーケンスは将来のバージョンで構文エラーを引き起こすことになっている。この設定のデフォルト値は "warning" である。

設定値ごとの挙動

  • reportInvalidStringEscapeSequence: true or "error"

    • 無効なエスケープシーケンスの使用に対してエラーを生成する。
  • reportInvalidStringEscapeSequence: false or "none"

    • 無効なエスケープシーケンスの使用に関する診断を抑制する。
  • reportInvalidStringEscapeSequence: "warning"

    • 無効なエスケープシーケンスの使用に対して警告を生成する。

サンプルコード

  • reportInvalidStringEscapeSequence: "warning" の場合

    string = "This is an invalid escape sequence \x"
    # \x は無効なエスケープシーケンスであるため、警告が生成される
    
  • reportInvalidStringEscapeSequence: false or "none" の場合

    string = "This is an invalid escape sequence \x"
    # 無効なエスケープシーケンスに対する警告やエラーは抑制される
    

型エラーとその解決策

reportInvalidStringEscapeSequencetrue"error"、または "warning" の場合、無効なエスケープシーケンスの使用に対して警告またはエラーが報告される。この問題を解決するには、正しいエスケープシーケンスを使用するか、文字列をraw stringとして記述する。

  • 型エラーを修正するためのサンプルコード:
    string = r"This is a valid escape sequence \x"
    # raw stringを使用して無効なエスケープシーケンスを回避
    

reportUnknownParameterType

概要

reportUnknownParameterType: boolean or string

reportUnknownParameterType は、関数やメソッドの入力パラメータや戻り値の型が不明な場合の診断を生成または抑制する設定である。型が不明なパラメータは、型チェックにおいて不確実性をもたらし、エラーの潜在的な原因となる。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnknownParameterType: true or "error"

    • 型が不明なパラメータに対してエラーを生成する。
  • reportUnknownParameterType: false or "none"

    • 型が不明なパラメータに関する診断を抑制する。

サンプルコード

  • reportUnknownParameterType: true or "error" の場合

    def some_function(param):
        # param の型が不明である
        return param
    # param の型が不明であるため、エラーが生成される可能性がある
    
  • reportUnknownParameterType: false or "none" の場合

    def some_function(param):
        return param
    # 型が不明なパラメータに対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnknownParameterTypetrue または "error" の場合、型が不明なパラメータに対してエラーが報告される。この問題を解決するには、パラメータに明確な型注釈を付ける。

  • 型エラーを修正するためのサンプルコード:
    def some_function(param: int) -> int:
        return param
    # param に型注釈が付けられている
    

reportUnknownArgumentType

概要

reportUnknownArgumentType: boolean or string

reportUnknownArgumentType は、関数やメソッドの呼び出し引数の型が不明な場合の診断を生成または抑制する設定である。型が不明な引数は、型安全性を損ない、ランタイムエラーの原因となる可能性がある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnknownArgumentType: true or "error"

    • 型が不明な呼び出し引数に対してエラーを生成する。
  • reportUnknownArgumentType: false or "none"

    • 型が不明な呼び出し引数に関する診断を抑制する。

サンプルコード

  • reportUnknownArgumentType: true or "error" の場合

    def return_unknown_type(a):
        return a
    
    def add(a, b):
        return a + b
    
    x = return_unknown_type()
    result = add(x, 5)  # x の型が不明であるため、エラーが生成される可能性がある
    
  • reportUnknownArgumentType: false or "none" の場合

    def return_unknown_type(a):
        return a
    
    def add(a, b):
        return a + b
    
    x = return_unknown_type()
    result = add(x, 5)  # 型が不明な呼び出し引数に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnknownArgumentTypetrue または "error" の場合、型が不明な呼び出し引数に対してエラーが報告される。この問題を解決するには、呼び出し元で引数に明確な型注釈を付けるか、型が明確に定義された変数を使用する。

  • 型エラーを修正するためのサンプルコード:
    def return_unknown_type(a) -> int:
        return a
    
    def add(a: int, b: int) -> int:
        return a + b
    
    x = return_unknown_type(10)
    result = add(x, 5)  # x の型が明確に定義されている
    

reportUnknownLambdaType

概要

reportUnknownLambdaType: boolean or string

reportUnknownLambdaType は、ラムダ式の入力パラメータや戻り値の型が不明な場合の診断を生成または抑制する設定である。ラムダ式はしばしば短い関数として使用されるが、そのパラメータや戻り値の型が不明な場合、型安全性やコードの明確性に影響を及ぼす可能性がある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnknownLambdaType: true or "error"

    • 型が不明なラムダ式の入力パラメータや戻り値に対してエラーを生成する。
  • reportUnknownLambdaType: false or "none"

    • 型が不明なラムダ式の入力パラメータや戻り値に関する診断を抑制する。

サンプルコード

  • reportUnknownLambdaType: true or "error" の場合

    add = lambda x, y: x + y  # x, y の型が不明
    result = add(5, 10)  # 型が不明なラムダ式の使用、エラーが生成される可能性がある
    
  • reportUnknownLambdaType: false or "none" の場合

    add = lambda x, y: x + y
    result = add(5, 10)  # 型が不明なラムダ式の使用、警告やエラーは抑制される
    

型エラーとその解決策

reportUnknownLambdaTypetrue または "error" の場合、型が不明なラムダ式の入力パラメータや戻り値に対してエラーが報告される。この問題を解決するには、ラムダ式で明確な型注釈を使用するか、ラムダ式の代わりに型注釈のある通常の関数を使用する。

  • 型エラーを修正するためのサンプルコード:
    from typing import Callable
    
    add: Callable[[int, int], int] = lambda x, y: x + y  # ラムダ式に型注釈を追加
    result = add(5, 10)
    

reportUnknownVariableType

概要

reportUnknownVariableType: boolean or string

reportUnknownVariableType は、型が不明な変数に関する診断を生成または抑制する設定である。型が不明な変数は型安全性に影響を及ぼし、予期しないエラーの原因となり得る。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnknownVariableType: true or "error"

    • 型が不明な変数に対してエラーを生成する。
  • reportUnknownVariableType: false or "none"

    • 型が不明な変数に関する診断を抑制する。

サンプルコード

  • reportUnknownVariableType: true or "error" の場合

    def return_unknown_type(a):
        return a # aの型が不明であるため、エラーが生成される可能性がある
    
  • reportUnknownVariableType: false or "none" の場合

    def return_unknown_type(a):
        return a # 型が不明な変数に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnknownVariableTypetrue または "error" の場合、型が不明な変数に対してエラーが報告される。この問題を解決するには、変数に明確な型注釈を付けるか、型が明確に定義された関数の戻り値を使用する。

  • 型エラーを修正するためのサンプルコード:
    def return_unknown_type(a: int):
        return a # a の型が明確に定義されている
    

reportUnknownMemberType

概要

reportUnknownMemberType: boolean or string

reportUnknownMemberType は、クラスまたはインスタンス変数の型が不明な場合の診断を生成または抑制する設定である。クラスのメンバー変数(フィールド)の型が不明であると、型安全性に問題が生じる可能性があり、コードの明確性が低下する。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnknownMemberType: true or "error"

    • 型が不明なクラスまたはインスタンス変数に対してエラーを生成する。
  • reportUnknownMemberType: false or "none"

    • 型が不明なクラスまたはインスタンス変数に関する診断を抑制する。

サンプルコード

  • reportUnknownMemberType: true or "error" の場合

    class MyClass:
        def __init__(self):
            self.unknown_type_member = self.get_data()  # 型が不明
    
  • reportUnknownMemberType: false or "none" の場合

    class MyClass:
        # ...
    

型エラーとその解決策

reportUnknownMemberTypetrue または "error" の場合、型が不明なクラスまたはインスタンス変数に対してエラーが報告される。この問題を解決するには、メンバー変数に明確な型注釈を付けるか、型が明確に定義されたソースから値を割り当てる。

  • 型エラーを修正するためのサンプルコード:
    class MyClass:
        def __init__(self):
            self.unknown_type_member: int = self.get_data()  # 明確な型注釈を付ける
    

reportMissingParameterType

概要

reportMissingParameterType: boolean or string

reportMissingParameterType は、関数やメソッドの入力パラメータに型注釈が欠けている場合の診断を生成または抑制する設定である。ただし、メソッド内で使用される self および cls パラメータはこのチェックから除外される。型注釈を付けることで、コードの意図と予期される動作が明確になり、型安全性が向上する。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportMissingParameterType: true or "error"

    • 型注釈が欠けている入力パラメータに対してエラーを生成する。
  • reportMissingParameterType: false or "none"

    • 型注釈が欠けている入力パラメータに関する診断を抑制する。

サンプルコード

  • reportMissingParameterType: true or "error" の場合

    def add(a, b):  # a と b に型注釈が欠けている
        return a + b
    # a と b の型注釈が欠けているため、エラーが生成される可能性がある
    
  • reportMissingParameterType: false or "none" の場合

    def add(a, b):
        return a + b
    # 型注釈が欠けている入力パラメータに対する警告やエラーは抑制される
    

型エラーとその解決策

reportMissingParameterTypetrue または "error" の場合、型注釈が欠けている入力パラメータに対してエラーが報告される。この問題を解決するには、関数やメソッドのパラメータに明確な型注釈を付ける。

  • 型エラーを修正するためのサンプルコード:
    def add(a: int, b: int) -> int:
        return a + b
    # a と b に型注釈が付けられている
    

reportMissingTypeArgument

概要

reportMissingTypeArgument: boolean or string

reportMissingTypeArgument は、ジェネリッククラス(例えば list など)が明示的または暗黙的な型引数なしで使用された場合の診断を生成または抑制する設定である。型引数を指定しないことにより、型の不明瞭さが生じ、型安全性が低下する可能性がある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportMissingTypeArgument: true or "error"

    • 型引数なしでジェネリッククラスを使用する場合にエラーを生成する。
  • reportMissingTypeArgument: false or "none"

    • 型引数なしでジェネリッククラスを使用する場合の診断を抑制する。

サンプルコード

  • reportMissingTypeArgument: true or "error" の場合

    some_list: list = [1, 2, 3]  # list ジェネリッククラスに型引数が欠けている
    # 型引数が欠けているため、エラーが生成される可能性がある
    
  • reportMissingTypeArgument: false or "none" の場合

    some_list: list = [1, 2, 3]
    # 型引数なしで list ジェネリッククラスを使用する場合の警告やエラーは抑制される
    

型エラーとその解決策

reportMissingTypeArgumenttrue または "error" の場合、型引数なしでジェネリッククラスを使用するとエラーが報告される。この問題を解決するには、ジェネリッククラスの使用時に適切な型引数を指定する。

  • 型エラーを修正するためのサンプルコード:
    some_list: list[int] = [1, 2, 3]  # list に適切な型引数 int を指定
    # some_list が型引数を持つ list[int] として使用されている
    

reportInvalidTypeVarUse

概要

reportInvalidTypeVarUse: boolean or string

reportInvalidTypeVarUse は、TypeVar(型変数)がジェネリック関数のシグネチャ内で不適切に使用された場合の診断を生成または抑制する設定である。TypeVar は型の一般化と再利用を可能にするが、適切に使用されない場合、型の整合性や明確性が損なわれる。この設定のデフォルト値は "warning" である。

設定値ごとの挙動

  • reportInvalidTypeVarUse: true or "error"

    • 不適切な TypeVar の使用に対してエラーを生成する。
  • reportInvalidTypeVarUse: "warning"

    • 不適切な TypeVar の使用に対して警告を生成する。
  • reportInvalidTypeVarUse: false or "none"

    • 不適切な TypeVar の使用に関する診断を抑制する。

サンプルコード

  • reportInvalidTypeVarUse: "warning" の場合

    from typing import TypeVar
    
    T = TypeVar("T")
    def get(value: T):  # T が一度だけ使用されている
        return value
    # TypeVar 'T' が不適切に使用されているため、警告が生成される可能性がある
    
  • reportInvalidTypeVarUse: false or "none" の場合

    from typing import TypeVar
    
    T = TypeVar("T")
    def get(value: T):
        return value
    # 不適切な `TypeVar` の使用に対する警告やエラーは抑制される
    

型エラーとその解決策

reportInvalidTypeVarUsetrue"error"、または "warning" の場合、不適切な TypeVar の使用に対して警告またはエラーが報告される。TypeVar は一般に、複数の関連する型間の関係を表現するために使用されるべきである。

  • 型エラーを修正するためのサンプルコード:
    from typing import TypeVar
    
    T = TypeVar("T")
    def get(value: T) -> T:  # T を関数の戻り値にも使用して型関係を明確にする
        return value
    # TypeVar 'T' が適切に使用されている
    

reportCallInDefaultInitializer

概要

reportCallInDefaultInitializer: boolean or string

reportCallInDefaultInitializer は、デフォルト値の初期化式内での関数呼び出しや式に関する診断を生成または抑制する設定である。デフォルト値でコストの高い操作を行うと、その関数を含むモジュールを初期化する際にそれらが評価され、モジュール初期化のパフォーマンスに影響を及ぼす可能性がある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportCallInDefaultInitializer: true or "error"

    • デフォルト値の初期化式内の関数呼び出しや式に対してエラーを生成する。
  • reportCallInDefaultInitializer: false or "none"

    • デフォルト値の初期化式内の関数呼び出しや式に関する診断を抑制する。

サンプルコード

  • reportCallInDefaultInitializer: true or "error" の場合

    def expensive_operation():
        # 何らかのコストの高い操作
        pass
    
    def fun(a = expensive_operation()):
        return a
    # fun 関数の a のデフォルト値に expensive_operation が使われており、エラーが生成される可能性がある
    
  • reportCallInDefaultInitializer: false or "none" の場合

    def expensive_operation():
        # ...
    
    def fun(a = expensive_operation()):
        return a
    # デフォルト値の初期化式内の関数呼び出しに対する警告やエラーは抑制される
    

型エラーとその解決策

reportCallInDefaultInitializertrue または "error" の場合、デフォルト値の初期化式内での関数呼び出しや式に対してエラーが報告される。この問題を解決するには、デフォルト値として高コストの操作を避け、より単純な値を使用するか、必要に応じて遅延評価を行う。

  • 型エラーを修正するためのサンプルコード:
    def expensive_operation():
        # ...
    
    def fun(a = None):
        if a is None:
            a = expensive_operation()
        return a
    # expensive_operation の呼び出しを遅延させる
    

reportUnnecessaryIsInstance

概要

reportUnnecessaryIsInstance: boolean or string

reportUnnecessaryIsInstance は、isinstanceissubclass の呼び出しで、その結果が静的に常に真であることが判明している場合の診断を生成または抑制する設定である。このような呼び出しは、しばしばプログラミング上の誤りを示しており、不要な型チェックを意味する。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnnecessaryIsInstance: true or "error"

    • 常に真と判明している isinstanceissubclass の呼び出しに対してエラーを生成する。
  • reportUnnecessaryIsInstance: false or "none"

    • 不必要な isinstanceissubclass の呼び出しに関する診断を抑制する。

サンプルコード

  • reportUnnecessaryIsInstance: true or "error" の場合

    class MyClass:
        pass
    
    obj = MyClass()
    if isinstance(obj, MyClass):  # 常に真であるため不必要
        pass
    # obj が MyClass のインスタンスであることは明らかであるため、エラーが生成される可能性がある
    
  • reportUnnecessaryIsInstance: false or "none" の場合

    class MyClass:
        pass
    
    obj = MyClass()
    if isinstance(obj, MyClass):
        pass
    # 不必要な isinstance 呼び出しに対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnnecessaryIsInstancetrue または "error" の場合、不必要な isinstanceissubclass の呼び出しに対してエラーが報告される。この問題を解決するには、型チェックが不要な場合はそれを省略するか、より適切な方法で型の検証を行う。

  • 型エラーを修正するためのサンプルコード:
    class MyClass:
        pass
    
    obj = MyClass()
    # obj の型チェックは不要であるため、isinstance の呼び出しを省略
    

reportUnnecessaryCast

概要

reportUnnecessaryCast: boolean or string

reportUnnecessaryCast は、静的に不必要であると判断された cast 呼び出しに関する診断を生成または抑制する設定である。このような cast 呼び出しは、時にプログラミング上の誤りを示している可能性があり、型システムの利用に関する誤解を反映していることがある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnnecessaryCast: true or "error"

    • 不必要と判断された cast 呼び出しに対してエラーを生成する。
  • reportUnnecessaryCast: false or "none"

    • 不必要な cast 呼び出しに関する診断を抑制する。

サンプルコード

  • reportUnnecessaryCast: true or "error" の場合

    from typing import cast
    
    class MyClass:
        pass
    
    obj = MyClass()
    casted_obj = cast(MyClass, obj)  # obj は既に MyClass のインスタンスであるため不必要
    # casted_obj の cast は不必要であるため、エラーが生成される可能性がある
    
  • reportUnnecessaryCast: false or "none" の場合

    from typing import cast
    
    class MyClass:
        pass
    
    obj = MyClass()
    casted_obj = cast(MyClass, obj)
    # 不必要な cast 呼び出しに対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnnecessaryCasttrue または "error" の場合、不必要と判断された cast 呼び出しに対してエラーが報告される。この問題を解決するには、不必要な型キャストを行わないようにコードを調整する。

  • 型エラーを修正するためのサンプルコード:
    class MyClass:
        pass
    
    obj = MyClass()
    # obj の型キャストは不要であるため、cast の呼び出しを省略
    

reportUnnecessaryComparison

概要

reportUnnecessaryComparison: boolean or string

reportUnnecessaryComparison は、==!= の比較、または他の条件式が静的に常に False または True に評価されることが判明している場合の診断を生成または抑制する設定である。特に、異なる型間の比較が常に False になる場合などがこれに該当する。このような比較は、プログラミング上の誤りを示唆することがある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnnecessaryComparison: true or "error"

    • 常に False または True に評価される比較に対してエラーを生成する。
  • reportUnnecessaryComparison: false or "none"

    • 常に False または True に評価される比較に関する診断を抑制する。

サンプルコード

  • reportUnnecessaryComparison: true or "error" の場合

    x = 10
    if x == "10":  # int 型と str 型の比較は常に False である
        pass
    # 比較が常に False であるため、エラーが生成される可能性がある
    
  • reportUnnecessaryComparison: false or "none" の場合

    x = 10
    if x == "10":
        pass
    # 異なる型間の比較に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnnecessaryComparisontrue または "error" の場合、常に False に評価される比較に対してエラーが報告される。この問題を解決するには、型の不一致がある比較を修正するか、比較が意味をなすような条件式を使用する。

  • 型エラーを修正するためのサンプルコード:
    x = 10
    if x == 10:  # 正しい型で比較
        pass
    # 型が一致する比較に変更されている
    

reportAssertAlwaysTrue

概要

reportAssertAlwaysTrue: boolean or string

reportAssertAlwaysTrue は、常に真となることが証明可能な assert 文に関する診断を生成または抑制する設定である。このような assert 文は、プログラミング上の誤りを示唆する可能性があり、不要なコードと見なされることがある。この設定のデフォルト値は "warning" である。

設定値ごとの挙動

  • reportAssertAlwaysTrue: true or "error"

    • 常に真となる assert 文に対してエラーを生成する。
  • reportAssertAlwaysTrue: "warning"

    • 常に真となる assert 文に対して警告を生成する。
  • reportAssertAlwaysTrue: false or "none"

    • 常に真となる assert 文に関する診断を抑制する。

サンプルコード

  • reportAssertAlwaysTrue: "warning" の場合

    assert (1, 2)  # この assert は常に真となる
    # 常に真となるため、警告が生成される可能性がある
    
  • reportAssertAlwaysTrue: false or "none" の場合

    assert (1, 2)
    # 常に真となる `assert` 文に対する警告やエラーは抑制される
    

型エラーとその解決策

reportAssertAlwaysTruetrue"error"、または "warning" の場合、常に真となる assert 文に対して警告またはエラーが報告される。この問題を解決するには、assert 文を意味のある条件で使用するか、完全に削除する。

  • 型エラーを修正するためのサンプルコード:
    x = 10
    assert x == 10  # 意味のある条件で assert を使用
    # `assert` が有意な条件をチェックするように修正されている
    

reportUnnecessaryContains

概要

reportUnnecessaryContains: boolean or string

reportUnnecessaryContains は、in 操作が静的に常に False または True に評価されることが判明している場合の診断を生成または抑制する設定である。このような in 操作は、プログラミング上の誤りを示している可能性があり、不要なコードを意味することがある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnnecessaryContains: true or "error"

    • 常に False または True に評価される in 操作に対してエラーを生成する。
  • reportUnnecessaryContains: false or "none"

    • 常に False または True に評価される in 操作に関する診断を抑制する。

サンプルコード

  • reportUnnecessaryContains: true or "error" の場合

    element = "5"
    if element in [1, 2, 3, 4, 5]:  # 文字列と数値の比較は常に False である
        pass
    # 'in' 操作が常に False であるため、エラーが生成される可能性がある
    
  • reportUnnecessaryContains: false or "none" の場合

    element = "5"
    if element in [1, 2, 3, 4, 5]:
        pass
    # 異なる型間の比較に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnnecessaryContainstrue または "error" の場合、常に False に評価される in 操作に対してエラーが報告される。この問題を解決するには、in 操作を意味のある条件で使用するか、完全に削除する。

  • 型エラーを修正するためのサンプルコード:
    element = "5"
    if element in ["1", "2", "3", "4", "5"]:  # 文字列リストでの比較に変更
        pass
    # 'in' 操作が意味のある条件をチェックするように修正されている
    

reportSelfClsParameterName

概要

reportSelfClsParameterName: boolean or string

reportSelfClsParameterName は、インスタンスメソッドにおける「self」パラメータやクラスメソッドにおける「cls」パラメータの欠如や誤った命名に関する診断を生成または抑制する設定である。通常、Pythonのインスタンスメソッドでは第一引数として「self」を、クラスメソッドでは「cls」を使用する。メタクラス(「type」から派生したクラス)内のインスタンスメソッドは、「cls」を使用することが許される。この設定のデフォルト値は "warning" である。

設定値ごとの挙動

  • reportSelfClsParameterName: true or "error"

    • 「self」や「cls」パラメータの欠如や誤った命名に対してエラーを生成する。
  • reportSelfClsParameterName: "warning"

    • 「self」や「cls」パラメータの欠如や誤った命名に対して警告を生成する。
  • reportSelfClsParameterName: false or "none"

    • 「self」や「cls」パラメータの欠如や誤った命名に関する診断を抑制する。

サンプルコード

  • reportSelfClsParameterName: "warning" の場合

    class MyClass:
        def instance_method(s):  # 通常は「self」と命名する
            pass
    
        @classmethod
        def class_method(c):  # 通常は「cls」と命名する
            pass
    # 's' や 'c' という名前の使用により、警告が生成される可能性がある
    
  • reportSelfClsParameterName: false or "none" の場合

    class MyClass:
        def instance_method(s):
            pass
    
        @classmethod
        def class_method(c):
            pass
    # 'self' や 'cls' の命名に関する警告やエラーは抑制される
    

型エラーとその解決策

reportSelfClsParameterNametrue"error"、または "warning" の場合、インスタンスメソッドやクラスメソッドのパラメータの命名に関する警告またはエラーが報告される。この問題を解決するには、慣習に従ってインスタンスメソッドの第一引数を「self」、クラスメソッドの第一引数を「cls」と命名する。

  • 型エラーを修正するためのサンプルコード:
    class MyClass:
        def instance_method(self):
            pass
    
        @classmethod
        def class_method(cls):
            pass
    # メソッドのパラメータが適切に命名されている
    

reportImplicitStringConcatenation

概要

reportImplicitStringConcatenation: boolean or string

reportImplicitStringConcatenation は、連続して配置された2つ以上の文字列リテラルによる暗黙の連結に関する診断を生成または抑制する設定である。このような暗黙の文字列連結は、一般に悪いプラクティスと見なされ、コンマの欠落などのバグを隠蔽することがしばしばある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportImplicitStringConcatenation: true or "error"

    • 暗黙の文字列連結に対してエラーを生成する。
  • reportImplicitStringConcatenation: false or "none"

    • 暗黙の文字列連結に関する診断を抑制する。

サンプルコード

  • reportImplicitStringConcatenation: true or "error" の場合

    greeting = "Hello, " "world!"  # 暗黙の連結
    # greeting の暗黙の連結により、エラーが生成される可能性がある
    
  • reportImplicitStringConcatenation: false or "none" の場合

    greeting = "Hello, " "world!"
    # 暗黙の文字列連結に対する警告やエラーは抑制される
    

型エラーとその解決策

reportImplicitStringConcatenationtrue または "error" の場合、暗黙の文字列連結に対してエラーが報告される。この問題を解決するには、文字列リテラルを明示的に連結するか、一つのリテラルとして記述する。

  • 型エラーを修正するためのサンプルコード:
    greeting = "Hello, " + "world!"  # 明示的な連結
    # または
    greeting = "Hello, world!"  # 一つのリテラルとして記述
    # 文字列が明示的に連結されている
    

reportUndefinedVariable

概要

reportUndefinedVariable: boolean or string

reportUndefinedVariable は、未定義の変数に関する診断を生成または抑制する設定である。未定義の変数は、プログラムの実行中に参照エラーを引き起こす可能性があるため、これらの診断はプログラミング上の誤りを早期に発見するのに役立つ。この設定のデフォルト値は "error" である。

設定値ごとの挙動

  • reportUndefinedVariable: true or "error"

    • 未定義の変数に対してエラーを生成する。
  • reportUndefinedVariable: false or "none"

    • 未定義の変数に関する診断を抑制する。

サンプルコード

  • reportUndefinedVariable: true or "error" の場合

    def some_function():
        return my_undefined_variable  # 未定義の変数
    # my_undefined_variable が未定義であるため、エラーが生成される可能性がある
    
  • reportUndefinedVariable: false or "none" の場合

    def some_function():
        return my_undefined_variable
    # 未定義の変数に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUndefinedVariabletrue または "error" の場合、未定義の変数に対してエラーが報告される。この問題を解決するには、変数が適切に定義されていることを確認するか、存在しない変数の参照を避ける。

  • 型エラーを修正するためのサンプルコード:
    def some_function():
        my_defined_variable = 10
        return my_defined_variable  # 適切に定義された変数を使用
    # 適切に定義された変数が使用されている
    

reportUnboundVariable

概要

reportUnboundVariable: boolean or string

reportUnboundVariable は、未定義またはおそらく未定義の変数に関する診断を生成または抑制する設定である。未定義の変数は、プログラムの実行中に参照エラーを引き起こす可能性があり、プログラミング上の誤りを早期に発見するのに役立つ。この設定のデフォルト値は "error" である。

設定値ごとの挙動

  • reportUnboundVariable: true or "error"

    • 未定義またはおそらく未定義の変数に対してエラーを生成する。
  • reportUnboundVariable: false or "none"

    • 未定義またはおそらく未定義の変数に関する診断を抑制する。

サンプルコード

  • reportUnboundVariable: true or "error" の場合

    def some_function():
        if some_condition:
            bound_variable = 10
        return bound_variable  # 変数が条件によって未定義の可能性がある
    # bound_variable が条件によって未定義の可能性があるため、エラーが生成される
    
  • reportUnboundVariable: false or "none" の場合

    def some_function():
        if some_condition:
            bound_variable = 10
        return bound_variable
    # 未定義またはおそらく未定義の変数に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnboundVariabletrue または "error" の場合、未定義またはおそらく未定義の変数に対してエラーが報告される。この問題を解決するには、変数がすべての実行パスで適切に定義されていることを確認する。

  • 型エラーを修正するためのサンプルコード:
    def some_function():
        bound_variable = None  # 初期化
        if some_condition:
            bound_variable = 10
        return bound_variable
    # すべての実行パスで変数が定義されている
    

reportIncompleteStub

概要

reportIncompleteStub: boolean or string

reportIncompleteStub は、タイプスタブファイル内のモジュールレベルの __getattr__ 呼び出しに関する診断を生成または抑制する設定である。タイプスタブファイルにおける __getattr__ 呼び出しは、そのスタブが不完全であることを示している可能性がある。タイプスタブは、Pythonのモジュールやパッケージの型情報を提供するために使用されるファイルで、型チェッカーによる型チェックの精度を向上させるために重要である。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportIncompleteStub: true or "error"

    • 不完全なタイプスタブに関してエラーを生成する。
  • reportIncompleteStub: false or "none"

    • 不完全なタイプスタブに関する診断を抑制する。

サンプルコード

  • reportIncompleteStub: true or "error" の場合

    # 例: my_module.pyi タイプスタブファイル
    
    def __getattr__(name: str) -> Any:
        pass
    # この __getattr__ は、タイプスタブが不完全であることを示している可能性があり、エラーが生成される
    
  • reportIncompleteStub: false or "none" の場合

    # 例: my_module.pyi タイプスタブファイル
    
    def __getattr__(name: str) -> Any:
        pass
    # 不完全なタイプスタブに対する警告やエラーは抑制される
    

型エラーとその解決策

reportIncompleteStubtrue または "error" の場合、不完全なタイプスタブに対してエラーが報告される。この問題を解決するには、タイプスタブファイルを完全にするために、モジュール内のすべての公開関数やクラスの型定義を追加する。

  • 型エラーを修正するためのサンプルコード:
    # 例: my_module.pyi タイプスタブファイル
    
    class MyClass:
        def my_method(self) -> None:
            ...
    
    def my_function() -> int:
        ...
    # タイプスタブファイルに不足していた型情報を追加
    

reportUnsupportedDunderAll

概要

reportUnsupportedDunderAll: boolean or string

reportUnsupportedDunderAll は、静的型チェッカーによって許可されていない方法で __all__ を定義または操作する文に関する診断を生成または抑制する設定である。このような操作により、__all__ の内容が不明確または誤っている可能性がある。また、モジュールの名前空間に存在しない名前が __all__ リスト内にある場合も報告される。この設定のデフォルト値は "warning" である。

設定値ごとの挙動

  • reportUnsupportedDunderAll: true or "error"

    • __all__ に関する許可されていない操作に対してエラーを生成する。
  • reportUnsupportedDunderAll: "warning"

    • __all__ に関する許可されていない操作に対して警告を生成する。
  • reportUnsupportedDunderAll: false or "none"

    • __all__ に関する許可されていない操作に関する診断を抑制する。

サンプルコード

  • reportUnsupportedDunderAll: "warning" の場合

    __all__ = ["some_function", "SomeClass"]
    __all__.append("another_function")  # 許可されていない操作
    
    def some_function():
        pass
    
    class SomeClass:
        pass
    
    # "another_function" はモジュールの名前空間に存在しないため、警告が生成される
    
  • reportUnsupportedDunderAll: false or "none" の場合

    __all__ = ["some_function", "SomeClass"]
    __all__.append("another_function")
    
    # ...
    
    # `__all__` に関する許可されていない操作に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnsupportedDunderAlltrue"error"、または "warning" の場合、__all__ に関する許可されていない操作に対して警告またはエラーが報告される。この問題を解決するには、__all__ を静的に定義し、モジュールの名前空間に存在する名前のみを含める。

  • 型エラーを修正するためのサンプルコード:
    __all__ = ["some_function", "SomeClass"]
    # __all__ に静的なリストを定義し、存在する名前のみを含める
    

reportUnusedCallResult

概要

reportUnusedCallResult: boolean or string

reportUnusedCallResult は、戻り値が None でなく、かつどのようにも使用されていない関数の呼び出しに関する診断を生成または抑制する設定である。戻り値を無視することは、特にその戻り値が重要な情報を含む場合、プログラミング上の誤りを示している可能性がある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnusedCallResult: true or "error"

    • 戻り値が使用されていない関数呼び出しに対してエラーを生成する。
  • reportUnusedCallResult: false or "none"

    • 戻り値が使用されていない関数呼び出しに関する診断を抑制する。

サンプルコード

  • reportUnusedCallResult: true or "error" の場合

    def function_with_return_value():
        return "important information"
    
    function_with_return_value()  # 戻り値が使用されていない
    # 戻り値が無視されているため、エラーが生成される可能性がある
    
  • reportUnusedCallResult: false or "none" の場合

    def function_with_return_value():
        return "important information"
    
    function_with_return_value()
    # 戻り値が使用されていない関数呼び出しに対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnusedCallResulttrue または "error" の場合、戻り値が使用されていない関数呼び出しに対してエラーが報告される。この問題を解決するには、関数の戻り値を適切に使用するか、その関数呼び出しを見直す。

  • 型エラーを修正するためのサンプルコード:
    def function_with_return_value():
        return "important information"
    
    result = function_with_return_value()
    print(result)  # 戻り値を使用
    # 関数の戻り値が適切に使用されている
    
    _ = function_with_return_value() # もしくは_で仮置きする
    

reportUnusedCoroutine

概要

reportUnusedCoroutine: boolean or string

reportUnusedCoroutine は、戻り値がコルーチンであり、その戻り値がどのようにも使用されていない関数の呼び出しに関する診断を生成または抑制する設定である。この設定は、await キーワードの省略による一般的なエラーを特定するのに役立つ。戻り値がコルーチンの関数は await されるべきであり、そうでない場合は意図された動作を行わない可能性がある。この設定のデフォルト値は "error" である。

設定値ごとの挙動

  • reportUnusedCoroutine: true or "error"

    • 戻り値が使用されていないコルーチン関数呼び出しに対してエラーを生成する。
  • reportUnusedCoroutine: false or "none"

    • 戻り値が使用されていないコルーチン関数呼び出しに関する診断を抑制する。

サンプルコード

  • reportUnusedCoroutine: true or "error" の場合

    async def async_function():
        return "some result"
    
    async_function()  # 戻り値が使用されておらず、await が省略されている
    # 戻り値が無視されているため、エラーが生成される可能性がある
    
  • reportUnusedCoroutine: false or "none" の場合

    async def async_function():
        return "some result"
    
    async_function()
    # 戻り値が使用されていないコルーチン関数呼び出しに対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnusedCoroutinetrue または "error" の場合、戻り値が使用されていないコルーチン関数呼び出しに対してエラーが報告される。この問題を解決するには、コルーチンを await するか、その関数呼び出しを見直す。

  • 型エラーを修正するためのサンプルコード:
    async def async_function():
        return "some result"
    
    result = await async_function()  # コルーチンを await する
    # コルーチンの戻り値が適切に使用されている
    

reportUnusedExpression

概要

reportUnusedExpression: boolean or string

reportUnusedExpression は、その結果がいかなる方法でも使用されていない単純な表現に関する診断を生成または抑制する設定である。このような未使用の表現は、コード内の無駄や潜在的な誤りを示す可能性があり、プログラミングの効率を下げることがある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnusedExpression: true or "error"

    • 結果が使用されていない単純な表現に対してエラーを生成する。
  • reportUnusedExpression: false or "none"

    • 結果が使用されていない単純な表現に関する診断を抑制する。

サンプルコード

  • reportUnusedExpression: true or "error" の場合

    5 + 10  # 結果が使用されていない表現
    # この表現は使用されておらず、エラーが生成される可能性がある
    
  • reportUnusedExpression: false or "none" の場合

    5 + 10
    # 結果が使用されていない表現に対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnusedExpressiontrue または "error" の場合、結果が使用されていない単純な表現に対してエラーが報告される。この問題を解決するには、表現の結果を適切に使用するか、表現自体を削除する。

  • 型エラーを修正するためのサンプルコード:
    result = 5 + 10  # 表現の結果を変数に割り当てる
    # 表現の結果が適切に使用されている
    

reportUnnecessaryTypeIgnoreComment

概要

reportUnnecessaryTypeIgnoreComment: boolean or string

reportUnnecessaryTypeIgnoreComment は、削除しても影響がない # type: ignore または # pyright: ignore コメントに関する診断を生成または抑制する設定である。これらのコメントは、通常、型チェッカーによるエラーを意図的に無視するために使用されるが、不要な場合、コードの可読性や保守性に影響を及ぼす可能性がある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportUnnecessaryTypeIgnoreComment: true or "error"

    • 影響がない # type: ignore または # pyright: ignore コメントに対してエラーを生成する。
  • reportUnnecessaryTypeIgnoreComment: false or "none"

    • 影響がない # type: ignore または # pyright: ignore コメントに関する診断を抑制する。

サンプルコード

  • reportUnnecessaryTypeIgnoreComment: true or "error" の場合

    x = 10  # type: ignore
    # このコメントは型チェックに影響を与えないため、エラーが生成される可能性がある
    
  • reportUnnecessaryTypeIgnoreComment: false or "none" の場合

    x = 10  # type: ignore
    # 影響がないコメントに対する警告やエラーは抑制される
    

型エラーとその解決策

reportUnnecessaryTypeIgnoreCommenttrue または "error" の場合、影響がない # type: ignore または # pyright: ignore コメントに対してエラーが報告される。この問題を解決するには、不要なコメントを削除する。

  • 型エラーを修正するためのサンプルコード:
    x = 10  # 不要なコメントを削除
    # コメントが削除され、コードの可読性が向上している
    

reportMatchNotExhaustive

概要

reportMatchNotExhaustive: boolean or string

reportMatchNotExhaustive は、対象の式に対するすべての潜在的な型を網羅していない match 文に関する診断を生成または抑制する設定である。Python 3.10で導入された match 文は、さまざまな型や条件に基づいて異なるブロックのコードを実行するために使用される。この設定は、match 文が対象の式のすべての可能な型をカバーしていない場合に警告やエラーを提供する。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportMatchNotExhaustive: true or "error"

    • すべての型を網羅していない match 文に対してエラーを生成する。
  • reportMatchNotExhaustive: false or "none"

    • すべての型を網羅していない match 文に関する診断を抑制する。

サンプルコード

  • reportMatchNotExhaustive: true or "error" の場合

    value = ...  # ある値
    
    match value:
        case int():
            pass
        case str():
            pass
        # 他の型についてのケースが欠けている
    # value の可能な型をすべてカバーしていないため、エラーが生成される可能性がある
    
  • reportMatchNotExhaustive: false or "none" の場合

    value = ...
    
    match value:
        case int():
            pass
        case str():
            pass
    # すべての型を網羅していない `match` 文に対する警告やエラーは抑制される
    

型エラーとその解決策

reportMatchNotExhaustivetrue または "error" の場合、すべての型を網羅していない match 文に対してエラーが報告される。この問題を解決するには、match 文において対象の式のすべての潜在的な型に対応するケースを提供する。

  • 型エラーを修正するためのサンプルコード:
    value = ...
    
    match value:
        case int():
            pass
        case str():
            pass
        case _:
            pass  # 他のすべての型に対応するケースを追加
    # `match` 文がすべての潜在的な型を網羅している
    

reportImplicitOverride

概要

reportImplicitOverride: boolean or string

reportImplicitOverride は、明示的な @override デコレーターを欠いているクラス内のオーバーライドされたメソッドに関する診断を生成または抑制する設定である。@override デコレーターは、あるメソッドが基底クラスのメソッドをオーバーライドしていることを明示するために使用される。このデコレーターの使用は、意図的なオーバーライドと偶発的な名前の衝突を区別するのに役立つ。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportImplicitOverride: true or "error"

    • 明示的な @override デコレーターを欠いたオーバーライドメソッドに対してエラーを生成する。
  • reportImplicitOverride: false or "none"

    • 明示的な @override デコレーターを欠いたオーバーライドメソッドに関する診断を抑制する。

サンプルコード

  • reportImplicitOverride: true or "error" の場合

    class BaseClass:
        def some_method(self):
            pass
    
    class DerivedClass(BaseClass):
        def some_method(self):  # @override デコレーターが欠けている
            pass
    # DerivedClass の some_method が BaseClass をオーバーライドしているが、@override が欠けているためエラーが生成される可能性がある
    
  • reportImplicitOverride: false or "none" の場合

    class BaseClass:
        def some_method(self):
            pass
    
    class DerivedClass(BaseClass):
        def some_method(self):
            pass
    # @override デコレーターを欠いたオーバーライドメソッドに対する警告やエラーは抑制される
    

型エラーとその解決策

reportImplicitOverridetrue または "error" の場合、明示的な @override デコレーターを欠いたオーバーライドメソッドに対してエラーが報告される。この問題を解決するには、オーバーライドされたメソッドに @override デコレーターを追加する。

  • 型エラーを修正するためのサンプルコード:
    class BaseClass:
        def some_method(self):
            pass
    
    class DerivedClass(BaseClass):
        @override
        def some_method(self):
            pass
    # @override デコレーターが追加され、明示的にオーバーライドしていることが示されている
    

reportShadowedImports

概要

reportShadowedImports: boolean or string

reportShadowedImports は、標準ライブラリ(stdlib)内のモジュールをオーバーライドしているファイルに関する診断を生成または抑制する設定である。Pythonでは、同じ名前のモジュールが標準ライブラリとユーザー定義のコードの両方で存在する場合、ユーザー定義のモジュールが標準ライブラリのモジュールを「シャドウ」(覆い隠す)ことがあり、これは意図しないバグの原因となることがある。この設定のデフォルト値は "none" である。

設定値ごとの挙動

  • reportShadowedImports: true or "error"

    • 標準ライブラリのモジュールをオーバーライドしているファイルに対してエラーを生成する。
  • reportShadowedImports: false or "none"

    • 標準ライブラリのモジュールをオーバーライドしているファイルに関する診断を抑制する。

サンプルコード

  • reportShadowedImports: true or "error" の場合

    # カスタムの datetime.py ファイルを作成
    # これは標準ライブラリの datetime モジュールをシャドウする
    # エラーが生成される可能性がある
    
  • reportShadowedImports: false or "none" の場合

    # カスタムの datetime.py ファイルが存在していても
    # 標準ライブラリのモジュールをオーバーライドしているファイルに対する警告やエラーは抑制される
    

型エラーとその解決策

reportShadowedImportstrue または "error" の場合、標準ライブラリのモジュールをオーバーライドしているファイルに対してエラーが報告される。この問題を解決するには、標準ライブラリのモジュール名と競合しない名前をファイルに付ける。

  • 型エラーを修正するためのサンプルコード:
    # 標準ライブラリのモジュール名と競合しないようにファイル名を変更する
    # 例: my_datetime.py に変更
    
info-outline

お知らせ

K.DEVは株式会社KDOTにより運営されています。記事の内容や会社でのITに関わる一般的なご相談に専門の社員がお答えしております。ぜひお気軽にご連絡ください。