Jupyter notebook 无法使用 parse_args() 函数的解决方法

目录

  • 前言
  • 1. 问题所示
  • 2. 函数形参(suc)
  • 3. 去除函数(suc)

前言

原本在pycharm执行的代码,想拆分放到jupyter notebook执行
特别是命令行参数传输的这个参数会出现bug

对应命令行获取参数的讲解可看我这篇文章:python中argparse模块关于 parse_args() 函数详解(全)

对应 parse_args函数代码如下:

def parse_args():
    parser = argparse.ArgumentParser(
        description='训练')
    parser.add_argument('-t', '--title', help='the name of running experiment',
                        dest='title',
                        default=None,
                        type=str
                        )
    parser.add_argument('-ppi', '--ppi', help='the chosen type of PPI',
                        dest='ppi',
                        default='CPDB',
                        type=str
                        )
    # 其他参数,此处省略
    
    args = parser.parse_args()
    return args

1. 问题所示

在jupyter notebook执行该行命令:args = parse_args()
出现的bug如下所示:

usage: ipykernel_launcher.py [-h] [-t TITLE] [-ppi PPI] [-omic OMIC]
                             [-cancer CANCER] [-e EPOCHS] [-p PATIENCE]
                             [-dp DP] [-lr LR] [-wd WD] [-hs1 HS1] [-hs2 HS2]
                             [-thr_go THR_GO] [-thr_seq THR_SEQ]
                             [-thr_exp THR_EXP] [-thr_path THR_PATH]
                             [-seed SEED]
ipykernel_launcher.py: error: unrecognized arguments: -f /home/kkjz/.local/share/jupyter/runtime/kernel-9aeb050b-0615-4455-bcd0-e34169f0f932.json
An exception has occurred, use %tb to see the full traceback.

SystemExit: 2


/home/kkjz/anaconda3/envs/py38/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3406: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
  warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

截图如下:
Jupyter notebook 无法使用 parse_args() 函数的解决方法_第1张图片

2. 函数形参(suc)

原因:本身应该赋值一些参数传入,此处没有参数传入导致无法编译成功

将其改为如下:args = parse_args(args=['-t','output', '-ppi', 'CPDB']),对应赋值,并且转换为列表传入(依旧不行)
结果如下:
Jupyter notebook 无法使用 parse_args() 函数的解决方法_第2张图片

深究其原因发现原函数代码没有args的参数,对应需要改写原函数参数
函数修改如下:

# 修改第一处,传入的参数
def parse_args(args):
    parser = argparse.ArgumentParser(
        description='训练')
    parser.add_argument('-t', '--title', help='the name of running experiment',
                        dest='title',
                        default=None,
                        type=str
                        )
    parser.add_argument('-ppi', '--ppi', help='the chosen type of PPI',
                        dest='ppi',
                        default='CPDB',
                        type=str
                        )
    # 其他参数,此处省略
    
    # 修改第二处,传入的参数
    args = parser.parse_args(args)
    return args

对应重新编译成功:
在这里插入图片描述

3. 去除函数(suc)

既然函数的传参有问题,又不知道怎么放
直接将其函数去除

对应如下:

# 整体前面的函数不要。python记得去除缩进
parser = argparse.ArgumentParser(
    description='训练')
parser.add_argument('-t', '--title', help='the name of running experiment',
                    dest='title',
                    default=None,
                    type=str
                    )
parser.add_argument('-ppi', '--ppi', help='the chosen type of PPI',
                    dest='ppi',
                    default='CPDB',
                    type=str
                    )
# 其他参数,此处省略

函数调用变为:args = parser.parse_args(args=['-t','output', '-ppi', 'CPDB']),(注意与上面的区别)

最后截图如下:
Jupyter notebook 无法使用 parse_args() 函数的解决方法_第3张图片

你可能感兴趣的:(BUG,jupyter,python,pycharm)