2016-09-15 18 views
3

私がint()と呼ぶことができるもの、あるいはstr()と呼べるものを受け入れたいとしましょう。どのように新しいタイプのヒントでそれを行うのですか?「変換できます」という意味のヒントは何ですか?

typing.SupportsIntで注釈を付けると、mypyが文字列を渡すことを警告するため、機能しません。

答えて

4

タイプヒントではできません。タイプヒントはの内容はの文字列については何も言えませんが、になるのは文字列でなければなりません。

すべてはPythonで文字列に変換できます(__repr__は常に利用可能です)。したがって、 '文字列に変換できる'の場合はtyping.Anyで処理できます。

int()の場合、特定のフックとタイプのみを再度指定できます。 __int__()メソッドを持つオブジェクトを受け入れるように指定できますが、文字列も受け入れる場合はをその文字列のに指定することはできません。

ので:

AcceptableToInt = Union[SupportsInt, str, bytes, bytearray] 

は、あなたが受け入れるint()どのタイプにチェックしてみましょうだろうが、あなたが実際にしようとすると、彼らはValueError例外がスローされますされていない場合。

+0

私はそれが変換される有効な値であることを知りたくありません。操作だけが許可されています。その意味で、ValueErrorをキャストできる値を許可したいのですが、TypeErrorは許可しません。 –

+0

@ e-satis: 'int()'が受け入れる型を指定するだけです。したがって、 'Union [str、SupportsInt、...]'型共用体です。 –

+0

だから基本的にtyping.SupportsIntとstrとboolのミックス? –

関連する問題