isinstance wrongly narrows away Any
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 20.6k
- Fork
- 3.3k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Bug Report
Mypy falsely narrows a type when using isinstance with a tuple containing a variable of type Any.
This only happens when there is at least one other element in the tuple.
Note that a class might have type Any if it is imported from an untyped module.
To Reproduce
from typing import Any
class A:
pass
B: Any # (Or from untyped_lib import B)
m: Any
if isinstance(m, (A, B)):
reveal_type(m)
else:
reveal_type(m)
Expected Behavior
Mypy reports no error. m is of type Any in both branches
Actual Behavior
The second branch is reported as unreachable.
Your Environment
- Mypy version used: 0.931
- Mypy command-line flags: --warn-unreachable
- Mypy configuration options from
mypy.ini(and other config files): None - Python version used: 3.10
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách chạy bản tái hiện được cung cấp với mypy 0.931, Python 3.10 và --warn-unreachable, sau đó lần theo logic narrowing của isinstance liên quan khi một tuple chứa Any. Hoàn thành khi ví dụ báo cáo m là Any trong cả hai nhánh và không còn đánh dấu nhánh else là không thể đạt tới.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- compilers, devtools
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100