Method: pylint.checkers.exceptions.ExceptionsChecker._check_try_except_raise
Calls: 314, Exceptions: 6, Paths: 6Back
Path 1: 254 calls (0.81)
TryExcept (254)
1def _check_try_except_raise(self, node: nodes.TryExcept) -> None:
2 def gather_exceptions_from_handler(
3 handler: nodes.ExceptHandler,
4 ) -> list[InferenceResult] | None:
5 exceptions: list[InferenceResult] = []
6 if handler.type:
7 exceptions_in_handler = utils.safe_infer(handler.type)
8 if isinstance(exceptions_in_handler, nodes.Tuple):
9 exceptions = list(
10 {
11 exception
12 for exception in exceptions_in_handler.elts
13 if isinstance(exception, (nodes.Name, nodes.Attribute))
14 }
15 )
16 elif exceptions_in_handler:
17 exceptions = [exceptions_in_handler]
18 else:
19 # Break when we cannot infer anything reliably.
20 return None
21 return exceptions
22
23 bare_raise = False
24 handler_having_bare_raise = None
25 exceptions_in_bare_handler: list[InferenceResult] | None = []
26 for handler in node.handlers:
27 if bare_raise:
28 # check that subsequent handler is not parent of handler which had bare raise.
29 # since utils.safe_infer can fail for bare except, check it before.
30 # also break early if bare except is followed by bare except.
31
32 excs_in_current_handler = gather_exceptions_from_handler(handler)
33 if not excs_in_current_handler:
34 break
35 if exceptions_in_bare_handler is None:
36 # It can be `None` when the inference failed
37 break
38 for exc_in_current_handler in excs_in_current_handler:
39 inferred_current = utils.safe_infer(exc_in_current_handler)
40 if any(
41 utils.is_subclass_of(utils.safe_infer(e), inferred_current)
42 for e in exceptions_in_bare_handler
43 ):
44 bare_raise = False
45 break
46
47 # `raise` as the first operator inside the except handler
48 if _is_raising([handler.body[0]]):
49 # flags when there is a bare raise
50 if handler.body[0].exc is None:
51 bare_raise = True
52 handler_having_bare_raise = handler
53 exceptions_in_bare_handler = gather_exceptions_from_handler(handler)
54 else:
55 if bare_raise:
56 self.add_message("try-except-raise", node=handler_having_bare_raise)
Path 2: 28 calls (0.09)
TryExcept (28)
1def _check_try_except_raise(self, node: nodes.TryExcept) -> None:
2 def gather_exceptions_from_handler(
3 handler: nodes.ExceptHandler,
4 ) -> list[InferenceResult] | None:
5 exceptions: list[InferenceResult] = []
6 if handler.type:
7 exceptions_in_handler = utils.safe_infer(handler.type)
8 if isinstance(exceptions_in_handler, nodes.Tuple):
9 exceptions = list(
10 {
11 exception
12 for exception in exceptions_in_handler.elts
13 if isinstance(exception, (nodes.Name, nodes.Attribute))
14 }
15 )
16 elif exceptions_in_handler:
17 exceptions = [exceptions_in_handler]
18 else:
19 # Break when we cannot infer anything reliably.
20 return None
21 return exceptions
22
23 bare_raise = False
24 handler_having_bare_raise = None
25 exceptions_in_bare_handler: list[InferenceResult] | None = []
26 for handler in node.handlers:
27 if bare_raise:
28 # check that subsequent handler is not parent of handler which had bare raise.
29 # since utils.safe_infer can fail for bare except, check it before.
30 # also break early if bare except is followed by bare except.
31
32 excs_in_current_handler = gather_exceptions_from_handler(handler)
33 if not excs_in_current_handler:
34 break
35 if exceptions_in_bare_handler is None:
36 # It can be `None` when the inference failed
37 break
38 for exc_in_current_handler in excs_in_current_handler:
39 inferred_current = utils.safe_infer(exc_in_current_handler)
40 if any(
41 utils.is_subclass_of(utils.safe_infer(e), inferred_current)
42 for e in exceptions_in_bare_handler
43 ):
44 bare_raise = False
45 break
46
47 # `raise` as the first operator inside the except handler
48 if _is_raising([handler.body[0]]):
49 # flags when there is a bare raise
50 if handler.body[0].exc is None:
51 bare_raise = True
52 handler_having_bare_raise = handler
53 exceptions_in_bare_handler = gather_exceptions_from_handler(handler)
54 else:
55 if bare_raise:
56 self.add_message("try-except-raise", node=handler_having_bare_raise)
Path 3: 22 calls (0.07)
TryExcept (22)
1def _check_try_except_raise(self, node: nodes.TryExcept) -> None:
2 def gather_exceptions_from_handler(
3 handler: nodes.ExceptHandler,
4 ) -> list[InferenceResult] | None:
5 exceptions: list[InferenceResult] = []
6 if handler.type:
7 exceptions_in_handler = utils.safe_infer(handler.type)
8 if isinstance(exceptions_in_handler, nodes.Tuple):
9 exceptions = list(
10 {
11 exception
12 for exception in exceptions_in_handler.elts
13 if isinstance(exception, (nodes.Name, nodes.Attribute))
14 }
15 )
16 elif exceptions_in_handler:
17 exceptions = [exceptions_in_handler]
18 else:
19 # Break when we cannot infer anything reliably.
20 return None
21 return exceptions
22
23 bare_raise = False
24 handler_having_bare_raise = None
25 exceptions_in_bare_handler: list[InferenceResult] | None = []
26 for handler in node.handlers:
27 if bare_raise:
28 # check that subsequent handler is not parent of handler which had bare raise.
29 # since utils.safe_infer can fail for bare except, check it before.
30 # also break early if bare except is followed by bare except.
31
32 excs_in_current_handler = gather_exceptions_from_handler(handler)
33 if not excs_in_current_handler:
34 break
35 if exceptions_in_bare_handler is None:
36 # It can be `None` when the inference failed
37 break
38 for exc_in_current_handler in excs_in_current_handler:
39 inferred_current = utils.safe_infer(exc_in_current_handler)
40 if any(
41 utils.is_subclass_of(utils.safe_infer(e), inferred_current)
42 for e in exceptions_in_bare_handler
43 ):
44 bare_raise = False
45 break
46
47 # `raise` as the first operator inside the except handler
48 if _is_raising([handler.body[0]]):
49 # flags when there is a bare raise
50 if handler.body[0].exc is None:
51 bare_raise = True
52 handler_having_bare_raise = handler
53 exceptions_in_bare_handler = gather_exceptions_from_handler(handler)
54 else:
55 if bare_raise:
56 self.add_message("try-except-raise", node=handler_having_bare_raise)
Path 4: 6 calls (0.02)
TryExcept (6)
GeneratorExit (6)
1def _check_try_except_raise(self, node: nodes.TryExcept) -> None:
2 def gather_exceptions_from_handler(
3 handler: nodes.ExceptHandler,
4 ) -> list[InferenceResult] | None:
5 exceptions: list[InferenceResult] = []
6 if handler.type:
7 exceptions_in_handler = utils.safe_infer(handler.type)
8 if isinstance(exceptions_in_handler, nodes.Tuple):
9 exceptions = list(
10 {
11 exception
12 for exception in exceptions_in_handler.elts
13 if isinstance(exception, (nodes.Name, nodes.Attribute))
14 }
15 )
16 elif exceptions_in_handler:
17 exceptions = [exceptions_in_handler]
18 else:
19 # Break when we cannot infer anything reliably.
20 return None
21 return exceptions
22
23 bare_raise = False
24 handler_having_bare_raise = None
25 exceptions_in_bare_handler: list[InferenceResult] | None = []
26 for handler in node.handlers:
27 if bare_raise:
28 # check that subsequent handler is not parent of handler which had bare raise.
29 # since utils.safe_infer can fail for bare except, check it before.
30 # also break early if bare except is followed by bare except.
31
32 excs_in_current_handler = gather_exceptions_from_handler(handler)
33 if not excs_in_current_handler:
34 break
35 if exceptions_in_bare_handler is None:
36 # It can be `None` when the inference failed
37 break
38 for exc_in_current_handler in excs_in_current_handler:
39 inferred_current = utils.safe_infer(exc_in_current_handler)
40 if any(
41 utils.is_subclass_of(utils.safe_infer(e), inferred_current)
42 for e in exceptions_in_bare_handler
43 ):
44 bare_raise = False
45 break
46
47 # `raise` as the first operator inside the except handler
48 if _is_raising([handler.body[0]]):
49 # flags when there is a bare raise
50 if handler.body[0].exc is None:
51 bare_raise = True
52 handler_having_bare_raise = handler
53 exceptions_in_bare_handler = gather_exceptions_from_handler(handler)
54 else:
55 if bare_raise:
56 self.add_message("try-except-raise", node=handler_having_bare_raise)
Path 5: 3 calls (0.01)
TryExcept (3)
1def _check_try_except_raise(self, node: nodes.TryExcept) -> None:
2 def gather_exceptions_from_handler(
3 handler: nodes.ExceptHandler,
4 ) -> list[InferenceResult] | None:
5 exceptions: list[InferenceResult] = []
6 if handler.type:
7 exceptions_in_handler = utils.safe_infer(handler.type)
8 if isinstance(exceptions_in_handler, nodes.Tuple):
9 exceptions = list(
10 {
11 exception
12 for exception in exceptions_in_handler.elts
13 if isinstance(exception, (nodes.Name, nodes.Attribute))
14 }
15 )
16 elif exceptions_in_handler:
17 exceptions = [exceptions_in_handler]
18 else:
19 # Break when we cannot infer anything reliably.
20 return None
21 return exceptions
22
23 bare_raise = False
24 handler_having_bare_raise = None
25 exceptions_in_bare_handler: list[InferenceResult] | None = []
26 for handler in node.handlers:
27 if bare_raise:
28 # check that subsequent handler is not parent of handler which had bare raise.
29 # since utils.safe_infer can fail for bare except, check it before.
30 # also break early if bare except is followed by bare except.
31
32 excs_in_current_handler = gather_exceptions_from_handler(handler)
33 if not excs_in_current_handler:
34 break
35 if exceptions_in_bare_handler is None:
36 # It can be `None` when the inference failed
37 break
38 for exc_in_current_handler in excs_in_current_handler:
39 inferred_current = utils.safe_infer(exc_in_current_handler)
40 if any(
41 utils.is_subclass_of(utils.safe_infer(e), inferred_current)
42 for e in exceptions_in_bare_handler
43 ):
44 bare_raise = False
45 break
46
47 # `raise` as the first operator inside the except handler
48 if _is_raising([handler.body[0]]):
49 # flags when there is a bare raise
50 if handler.body[0].exc is None:
51 bare_raise = True
52 handler_having_bare_raise = handler
53 exceptions_in_bare_handler = gather_exceptions_from_handler(handler)
54 else:
55 if bare_raise:
56 self.add_message("try-except-raise", node=handler_having_bare_raise)
Path 6: 1 calls (0.0)
TryExcept (1)
1def _check_try_except_raise(self, node: nodes.TryExcept) -> None:
2 def gather_exceptions_from_handler(
3 handler: nodes.ExceptHandler,
4 ) -> list[InferenceResult] | None:
5 exceptions: list[InferenceResult] = []
6 if handler.type:
7 exceptions_in_handler = utils.safe_infer(handler.type)
8 if isinstance(exceptions_in_handler, nodes.Tuple):
9 exceptions = list(
10 {
11 exception
12 for exception in exceptions_in_handler.elts
13 if isinstance(exception, (nodes.Name, nodes.Attribute))
14 }
15 )
16 elif exceptions_in_handler:
17 exceptions = [exceptions_in_handler]
18 else:
19 # Break when we cannot infer anything reliably.
20 return None
21 return exceptions
22
23 bare_raise = False
24 handler_having_bare_raise = None
25 exceptions_in_bare_handler: list[InferenceResult] | None = []
26 for handler in node.handlers:
27 if bare_raise:
28 # check that subsequent handler is not parent of handler which had bare raise.
29 # since utils.safe_infer can fail for bare except, check it before.
30 # also break early if bare except is followed by bare except.
31
32 excs_in_current_handler = gather_exceptions_from_handler(handler)
33 if not excs_in_current_handler:
34 break
35 if exceptions_in_bare_handler is None:
36 # It can be `None` when the inference failed
37 break
38 for exc_in_current_handler in excs_in_current_handler:
39 inferred_current = utils.safe_infer(exc_in_current_handler)
40 if any(
41 utils.is_subclass_of(utils.safe_infer(e), inferred_current)
42 for e in exceptions_in_bare_handler
43 ):
44 bare_raise = False
45 break
46
47 # `raise` as the first operator inside the except handler
48 if _is_raising([handler.body[0]]):
49 # flags when there is a bare raise
50 if handler.body[0].exc is None:
51 bare_raise = True
52 handler_having_bare_raise = handler
53 exceptions_in_bare_handler = gather_exceptions_from_handler(handler)
54 else:
55 if bare_raise:
56 self.add_message("try-except-raise", node=handler_having_bare_raise)