mypyで注釈が付けられたPython関数からNoneを返す、複数の戻り値の型 質問する

mypyで注釈が付けられたPython関数からNoneを返す、複数の戻り値の型 質問する

私は Typescript のバックグラウンドを持っています。現在取り組んでいる Python プロジェクトに静的型チェックを導入しています (mypy を使用)。

Typescript では、文字列など他のものを返すように注釈が付けられた関数から null を返すことは有効です。

function test(flag: boolean): string {
    if(flag) {
        return 'success';
    } else {
        return null;
    }
}

関数に複数の戻り値の型 (文字列またはブール値) を注釈付けすることもできます。

function test(flag: boolean): string | boolean {
    if(flag) {
        return 'success';
    } else {
        return false;
    }
}

しかし、mypy を使用する Python では、 return と注釈が付けられた関数から None を返すことはできませんstr

def test(flag: bool) -> str:
    if flag:
        return 'success'
    else:
        return None
        # [mypy] error:Incompatible return value type (got "None", expected "str")

さらに、複数の戻り値の型に注釈を付ける方法がわかりませんstr | None

mypy を使用してこのような問題にどのように対処すればよいでしょうか? エラー状態から None を返す関数がコードベース全体に存在します。

ベストアンサー1

はい、mypy gitter の @zsol のおかげで、ドキュメントに欠けていたものを見つけました。

2 つの便利な mypy 機能は、Python の型付けモジュールからインポートできる Optional 型と Union 型です。ドキュメントはここにあります。

関数がプライマリ タイプに加えて None を返す可能性があることを注釈付けする場合は、次のようにstrしますOptional

from typing import Optional

def test(flag: bool) -> Optional[str]:
    if flag:
        return 'success'
    else:
        return None

関数が複数の型を返す可能性があることを注釈付けしたい場合はstr | bool、次のようにしますUnion

from typing import Union

def test(flag: bool) -> Union[str, bool]:
    if flag:
        return 'success'
    else:
        return False

おすすめ記事