dead_code.py 文件源码

python
阅读 31 收藏 0 点赞 0 评论 0

项目:fatoptimizer 作者: vstinner 项目源码 文件源码
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
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号