mirror of https://github.com/python/cpython
gh-105578: Add more usage examples to `typing.AnyStr` docs (#107045)
``typing.AnyStr`` has different semantics to ``str | bytes``, which often leads to user confusion
This commit is contained in:
parent
f22bf8e3cf
commit
f877b32b87
|
@ -849,6 +849,21 @@ using ``[]``.
|
|||
concat(b"foo", b"bar") # OK, output has type 'bytes'
|
||||
concat("foo", b"bar") # Error, cannot mix str and bytes
|
||||
|
||||
Note that, despite its name, ``AnyStr`` has nothing to do with the
|
||||
:class:`Any` type, nor does it mean "any string". In particular, ``AnyStr``
|
||||
and ``str | bytes`` are different from each other and have different use
|
||||
cases::
|
||||
|
||||
# Invalid use of AnyStr:
|
||||
# The type variable is used only once in the function signature,
|
||||
# so cannot be "solved" by the type checker
|
||||
def greet_bad(cond: bool) -> AnyStr:
|
||||
return "hi there!" if cond else b"greetings!"
|
||||
|
||||
# The better way of annotating this function:
|
||||
def greet_proper(cond: bool) -> str | bytes:
|
||||
return "hi there!" if cond else b"greetings!"
|
||||
|
||||
.. data:: LiteralString
|
||||
|
||||
Special type that includes only literal strings.
|
||||
|
|
Loading…
Reference in New Issue