Jupyter Notebook でセルの実行をスキップする方法

今回は、Jupyter Notebook で条件によってセルの実行をスキップする方法を紹介します。
これらの方法は Google Colaboratory や Kaggle Notebooks でも使用可能です。

まず初めに、指定したセルの実行をスキップする方法を紹介します。
以下のようにマジックコマンドを自作して使用します。

  1. 何もしない skip マジックコマンドを作成します。

    from IPython.core.magic import register_cell_magic
    
    @register_cell_magic
    def skip(line, cell):
        return
    
  2. スキップしたいセルの先頭行に %%skip を追加します。

    %%skip
    <セル内のコード>
    

次に、条件によって実行をスキップするマジックコマンドを紹介します。

  1. skip_if マジックコマンドを作成します。

    from IPython.core.magic import register_cell_magic
    from IPython import get_ipython
    
    
    @register_cell_magic
    def skip_if(line, cell):
        if eval(line):
            return
        get_ipython().run_cell(cell)
    
  2. セルの先頭行に %%skip_if <条件式> を追加します。

    %%skip_if <条件式>
    <セル内のコード>
    

最後に、条件によって以降の全てのセルをスキップする方法を紹介します。

  1. 以下のようにrun_cellを書き換えます。

    from IPython import get_ipython
    
    SKIP_CONDITION = <条件式>
    
    # 元の run_cell を保存
    run_cell_org = get_ipython().run_cell
    
    # 条件によって実行をスキップするrun_cellを作成
    def custom_run_cell(*args, **kwargs):
        if SKIP_CONDITION:
            if 'raw_cell' in kwargs:
                kwargs['raw_cell'] = ""
            else:
                args = list(args)
                args[0] = ""
                args = tuple(args)
        return run_cell_org(*args, **kwargs)
    
    # run_cell を書き換える
    get_ipython().run_cell = custom_run_cell
    
  2. 以降のセルは、<条件式> が真の場合に全てスキップされます。

関連記事