agronholm / typeguard

Run-time type checker for Python
Other
1.52k stars 114 forks source link

typeguard does not check elements (except for the first element) in a list #452

Closed yifengshao closed 6 months ago

yifengshao commented 6 months ago

Things to check first

Typeguard version

4.2.1

Python version

3.11.0rc1

What happened?

typeguard does not check elements of a list except for the first element. Please see my example here:

How can we reproduce the bug?

Run the following codes in the console:

from typeguard import check_type

check_type(['123', 123], list[int, int])

check_type([123, '123'], list[int, int])

check_type([123, '123'], list[int, ...])
yifengshao commented 6 months ago

It also does not check the length of a list. See my example below:

Screenshot 2024-04-12 at 09 42 22

agronholm commented 6 months ago

You have not searched the documentation OR the issues. Documentation: https://typeguard.readthedocs.io/en/stable/api.html#typeguard.TypeCheckConfiguration.collection_check_strategy Duplicate issues: #446, #441, #439, #430, #422, #418, #417, #360

yifengshao commented 6 months ago

Thank you for your quick response. I just upgraded from typeguard 2.13.1 to 4.*, and apparently, I missed this important information. Now it works perfectly. Thanks!

agronholm commented 6 months ago

If you can suggest a place in the documentation where you yourself would've found the relevant information before creating the issue, let me know and I can add it there.

agronholm commented 6 months ago

Regarding that "list length check", list only takes one type parameter. tuple is the one that takes multiple parameters.