@@ -573,6 +573,20 @@ except (E1, E2) as e1:
573
573
except (E2, E1) as e2:
574
574
a = e2 # type: E1
575
575
b = e2 # type: E2 # E: Incompatible types in assignment (expression has type "E1", variable has type "E2")
576
+ except (E1, E2, int) as e3: # E: Exception type must be derived from BaseException
577
+ pass
578
+ [builtins fixtures/exception.py]
579
+
580
+ [case testExceptWithMultipleTypes3]
581
+ import typing
582
+ class E1(BaseException): pass
583
+ class E2(E1): pass
584
+ class E3(E1): pass
585
+ try: pass
586
+ except (E1, (E2, (E3,))) as e1:
587
+ reveal_type(e1) # E: Revealed type is '__main__.E1'
588
+ except (E2, (E3,)) as e2:
589
+ reveal_type(e2) # E: Revealed type is '__main__.E1'
576
590
[builtins fixtures/exception.py]
577
591
578
592
[case testReuseTryExceptionVariable]
@@ -618,6 +632,45 @@ except exc as e: pass # E: Exception type must be derived from BaseE
618
632
except BaseException() as b: pass # E: Exception type must be derived from BaseException
619
633
[builtins fixtures/exception.py]
620
634
635
+ [case testTupleValueAsExceptionType]
636
+ import typing
637
+ def exc() -> BaseException: pass
638
+ class E1(BaseException): pass
639
+ class E2(E1): pass
640
+ class E3(E1): pass
641
+
642
+ exs1 = (E1, E2)
643
+ try: pass
644
+ except exs1 as e1:
645
+ reveal_type(e1) # E: Revealed type is '__main__.E1'
646
+
647
+ exs2 = ((E1, (E2,)),)
648
+ try: pass
649
+ except exs2 as e2:
650
+ reveal_type(e2) # E: Revealed type is '__main__.E1'
651
+
652
+ exs3 = (E2, E3)
653
+ try: pass
654
+ except exs3 as e3:
655
+ reveal_type(e3) # E: Revealed type is '__main__.E1'
656
+ [builtins fixtures/exception.py]
657
+
658
+ [case testInvalidTupleValueAsExceptionType]
659
+ import typing
660
+ def exc() -> BaseException: pass
661
+ class E1(BaseException): pass
662
+ class E2(E1): pass
663
+ class E3(E1): pass
664
+
665
+ exs1 = (E1, E2, int)
666
+ try: pass
667
+ except exs1 as e: pass # E: Exception type must be derived from BaseException
668
+
669
+ exs2 = (E1, (E2, (int, (E3,))))
670
+ try: pass
671
+ except exs2 as e: pass # E: Exception type must be derived from BaseException
672
+ [builtins fixtures/exception.py]
673
+
621
674
[case testOverloadedExceptionType]
622
675
from typing import overload
623
676
class E(BaseException):
0 commit comments