mypyは文字列リテラルを追跡できますか?

ヤモリ:

とにかくこれを機能させるためにありますか

from typing import Literal
def foo(bar: Literal["bar"]) -> Literal["foo"]:
    foo = "foo"
    return foo


bar = "bar"
foo(bar)

ここにエラーがあります

foo.py:4: error: Incompatible return value type (got "str", expected "Literal['foo']")
foo.py:8: error: Argument 1 to "foo" has incompatible type "str"; expected "Literal['bar']"

foo変数とbarリテラルはリテラルに割り当てられているため、リテラルであることは明らかであるため、これは安全ですが、mypyはこれを追跡しないようです。私が見逃しているものはありますか?

ミスターミヤギ:

MyPyは、リテラルをLiteralその値ではなく、組み込み型に推測します。

mypy ドキュメント»リテラルタイプ

変数にリテラル型があることを宣言するには、注釈を明示的に追加する必要があります。[..]この注釈のない変数は、リテラルとは見なされません。

Literal値の推論を可能にするには、変数に次のように注釈を付けますFinal

from typing import Final

from typing_extensions import Final

bar: Final = "bar"
reveal_type(bar)  # Revealed type is 'Literal['bar']?'

変数にとして注釈を付けると、Finalその値が類似のタイプの値に置き換えられないこと示します。これによりLiteral、一般的なタイプだけでなく、タイプを特定のとして推測することが正しくなります

この推論は状況に応じたものであることに注意してください。タイプが推定さLiteralれるのは、a Literalが期待されるすべての場合です。タイプがリテラルタイプ、ベースタイプ、TypeVarのいずれであるかが予想される場合、タイプは一般タイプとして推測されます。

reveal_type([bar])  # Revealed type is 'builtins.list[builtins.str*]'

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

GITは1つのブランチでのみファイルを追跡できますが、他のブランチでは追跡できませんか?

分類Dev

文字列リテラルと文字リテラルを連結できますか?

分類Dev

Rustでは、文字列リテラルを所有できますか?

分類Dev

SklearnのTransformer APIを使用して、一貫して列ラベルを追跡できますか?

分類Dev

追跡できますか

分類Dev

MySQLはリテラル文字列を式に変換できますか?

分類Dev

Cの文字列リテラルを変更できますか?

分類Dev

グーグルアナリティクスは既知のブラウザのみを追跡しますか?

分類Dev

Macアプリはどのようにしてファイルの場所を追跡できますか?

分類Dev

EmacsはBBEditのようなファイルを追跡できますか?

分類Dev

ドラッグイベントを追跡できますか?

分類Dev

IMAPメールの返信を追跡できますか?

分類Dev

btrfsは不良ブロックを追跡/回避できますか?

分類Dev

Gitではリベースできません(追跡されていないファイルは上書きされます)。私は何をすべきか?

分類Dev

ランナーがフィットネス追跡アプリでペースを上げている場合、どうすれば追跡できますか?

分類Dev

ARKIT-いくつの追跡画像を追跡できますか?

分類Dev

文字列リテラルをconstchar *を受け取る関数に渡すことはできますか?

分類Dev

列がテーブルの変更を追跡できるように、VIEW出力句に「*」を保持するにはどうすればよいですか?

分類Dev

文字列リテラルが必要な場合はいつでもstd :: string :: c_str()を使用できますか?

分類Dev

USBフラッシュドライブを追跡可能にすることはできますか?

分類Dev

Swift文字列補間内で文字列/文字リテラルを使用できますか?

分類Dev

テーブル構造を変更すると、ReactはDOMを追跡できなくなります

分類Dev

グーグルアナリティクスでリンククリックを追跡しますか?

分類Dev

共有グローバルクラスでユーザーの場所を追跡できますか?

分類Dev

Java文字列リテラルが実装されているかを理解することはできません

分類Dev

複数の文字列リテラルを使用して文字列を作成できるのはなぜですか?

分類Dev

MYSQLは、列の入力値に基づいて複数の自動増分を追跡できますか?

分類Dev

AWS CodePipelineは複数の機能ブランチを追跡し、それぞれでテストを実行できますか?

分類Dev

UIViewControllerはプロパティを追跡できなくなります

Related 関連記事

  1. 1

    GITは1つのブランチでのみファイルを追跡できますが、他のブランチでは追跡できませんか?

  2. 2

    文字列リテラルと文字リテラルを連結できますか?

  3. 3

    Rustでは、文字列リテラルを所有できますか?

  4. 4

    SklearnのTransformer APIを使用して、一貫して列ラベルを追跡できますか?

  5. 5

    追跡できますか

  6. 6

    MySQLはリテラル文字列を式に変換できますか?

  7. 7

    Cの文字列リテラルを変更できますか?

  8. 8

    グーグルアナリティクスは既知のブラウザのみを追跡しますか?

  9. 9

    Macアプリはどのようにしてファイルの場所を追跡できますか?

  10. 10

    EmacsはBBEditのようなファイルを追跡できますか?

  11. 11

    ドラッグイベントを追跡できますか?

  12. 12

    IMAPメールの返信を追跡できますか?

  13. 13

    btrfsは不良ブロックを追跡/回避できますか?

  14. 14

    Gitではリベースできません(追跡されていないファイルは上書きされます)。私は何をすべきか?

  15. 15

    ランナーがフィットネス追跡アプリでペースを上げている場合、どうすれば追跡できますか?

  16. 16

    ARKIT-いくつの追跡画像を追跡できますか?

  17. 17

    文字列リテラルをconstchar *を受け取る関数に渡すことはできますか?

  18. 18

    列がテーブルの変更を追跡できるように、VIEW出力句に「*」を保持するにはどうすればよいですか?

  19. 19

    文字列リテラルが必要な場合はいつでもstd :: string :: c_str()を使用できますか?

  20. 20

    USBフラッシュドライブを追跡可能にすることはできますか?

  21. 21

    Swift文字列補間内で文字列/文字リテラルを使用できますか?

  22. 22

    テーブル構造を変更すると、ReactはDOMを追跡できなくなります

  23. 23

    グーグルアナリティクスでリンククリックを追跡しますか?

  24. 24

    共有グローバルクラスでユーザーの場所を追跡できますか?

  25. 25

    Java文字列リテラルが実装されているかを理解することはできません

  26. 26

    複数の文字列リテラルを使用して文字列を作成できるのはなぜですか?

  27. 27

    MYSQLは、列の入力値に基づいて複数の自動増分を追跡できますか?

  28. 28

    AWS CodePipelineは複数の機能ブランチを追跡し、それぞれでテストを実行できますか?

  29. 29

    UIViewControllerはプロパティを追跡できなくなります

ホットタグ

アーカイブ