Pythonで関数とNoneが取りうるパラメータに対して、Union型で型ヒントを与えようとしたところエラーになったので解決方法をメモします。
環境
- Python
- 3.9
対応
Union型を使わずに、Optional型でヒントを与えます。今回ハマっていたのは、sqlalchemy
でand_
条件をパラメータとして渡したかったので、そのユースケースを記載します。
def test( OK: Optional[and_], NG: and_ | None ): pass
NG側の型ヒントだと、次のようなエラーが発生してしまいます。
E TypeError: unsupported operand type(s) for |: 'function' and 'NoneType'
ソースコード
終わりに
Union
型で型ヒントを定義できるのは、Python3.9以降だったので頑張ってUnion
型で定義しようとしてしまいました。
一応、ヘルプではこう表現しているので、やろうと思ったら行けると思うんですけど。
Optional[X] is equivalent to X | None (or Union[X, None]).
あまりないケースかもしれませんが、残しておきます。