def _try_empty_body(self, node):
if not can_remove(node.body):
return
if not can_remove(node.handlers):
return
# body block is empty, handlers can be removed
self.log_node_removal("Remove dead code (empty try block)",
node.body)
self.log_node_removal("Remove dead code (empty try block)",
node.handlers)
if not node.orelse:
# body and else blocks are empty
#
# try: pass (except: ...) finally: final_code
# => final_code
if not can_move_final(node.finalbody):
return
return self._replace_node(node, node.finalbody)
if is_empty_body(node.finalbody):
# body and finally blocks are empty, else block is non empty
#
# try: pass (except: ...) else: else_code (final: pass)
# => else_code
self.log_node_removal("Remove dead code (empty finally block)",
node.finalbody)
return self._replace_node(node, node.orelse)
# body block is empty, else and final blocks are non empty
#
# try: pass (except: ...) else: code1 finally: code2
# => try: code1 finally: code2
if not can_move_final(node.finalbody):
return
new_node = ast.Try(body=node.orelse, finalbody=node.finalbody,
handlers=[], orelse=[])
copy_lineno(node, new_node)
return new_node
评论列表
文章目录