Python Can';t解析参数(使用pytorch的深入学习教程)

Python Can';t解析参数(使用pytorch的深入学习教程),python,deep-learning,jupyter-notebook,pytorch,Python,Deep Learning,Jupyter Notebook,Pytorch,我在跟踪 第一个脚本运行良好,我的脚本文件夹中有一个“数据”文件夹,其中包含从MRnet下载的MRI数据 然而,当涉及到“训练”脚本时,我得到了一个错误。以下是完整的脚本和错误(使用jupyter笔记本): %结核病: --------------------------------------------------------------------------- SystemExit回溯(最后一次最近调用) 在里面 275 276如果名称=“\uuuuu main\uuuuuuuuu”:

我在跟踪

第一个脚本运行良好,我的脚本文件夹中有一个“数据”文件夹,其中包含从MRnet下载的MRI数据

然而,当涉及到“训练”脚本时,我得到了一个错误。以下是完整的脚本和错误(使用jupyter笔记本):

%结核病:

---------------------------------------------------------------------------
SystemExit回溯(最后一次最近调用)
在里面
275
276如果名称=“\uuuuu main\uuuuuuuuu”:
-->277 args=parse_arguments()
278次运行(args)
在parse_参数()中
270.add_参数('--patience',type=int,default=5)
271解析器。添加参数('--log\u every',type=int,default=100)
-->272 args=parser.parse_args()
273返回参数
274
解析参数中的~\anaconda3\envs\Pytorch\lib\argparse.py(self、args、命名空间)
1753     # =====================================
1754 def parse_args(self,args=None,namespace=None):
->1755 args,argv=self.parse_known_args(args,名称空间)
1756如果argv:
1757 msg=(('无法识别的参数:%s')
解析参数中的~\anaconda3\envs\Pytorch\lib\argparse.py(self、args、命名空间)
1785#分析参数,如果有任何错误,请退出
1786尝试:
->1787名称空间,args=self.\u解析\u已知\u args(args,名称空间)
1788如果hasattr(名称空间,\u无法识别\u参数\u ATTR):
1789 args.extend(getattr(名称空间,\u未识别的\u args\u ATTR))
~\anaconda3\envs\Pytorch\lib\argparse.py in\u parse\u known\u args(self,arg\u字符串,命名空间)
2020年,如果需要,采取行动:
2021 self.error(382;('需要以下参数:%s')%
->2022','。加入(必需的行动))
2023
2024年#确保所有需要的小组都有一个选项
~\anaconda3\envs\Pytorch\lib\argparse.py出错(self,message)
2506自打印使用(系统标准)
2507 args={'prog':self.prog,'message':message}
->2508 self.exit(2,u(%(程序)s:错误:%(消息)s\n')%args)
出口中的~\anaconda3\envs\Pytorch\lib\argparse.py(self、status、message)
2493如果消息:
2494自我打印消息(消息,系统标准)
->2495系统退出(状态)
2496
2497 def错误(自身,消息):
系统出口:2
我不知道如何前进。我被困在这里了。有人知道从这里去哪里吗?

我猜

ArgumentParser
是为了在
console
/
terminal
中运行时获取参数而创建的,而不是
Juputer

python script.py -t abnormal -p axial --prefix_name abc
args = parse_arguments( ["-t", "abnormal", "-p", "axial", "--prefix_name", "abc"] )
Python将这些参数作为列表放入
sys.argv
中,并且
ArgumentParser
自动使用
parser.parse_args()中
sys.argv
中的值

如果要在
juputer
中运行它,则必须以列表的形式手动发送参数

args = parser.parse_args( ["-t", "abnormal", "-p", "axial", "--prefix_name", "abc"] )
或者您必须将参数附加到
sys.argv

sys.argv.append("-t")
sys.argv.append("abnormal")
sys.argv.append("-p")
sys.argv.append("axial")
sys.argv.append("--prefix_name")
sys.argv.append("abc")
或者使用
.extend(list)

或者使用带拆分(“”)的字符串

但是,如果您使用不同的参数在Jupyter中多次运行它,那么它将记住所有参数,并且您需要删除以前的参数

sys.argv.clear()
sys.argv.extend( ["-t", "abnormal", "-p", "axial", "--prefix_name", "abc"] )
或更换所有元件(第一个元件除外,有时可能有用)



最终,您可以更改函数
parse_arguments()
,使其更通用

你可以设置

def parse_arguments(arguments=None):

    # ... code ...

    args = parser.parse_args(arguments)
然后您可以在控制台/终端中运行的脚本中使用它

args = parse_arguments()
或者在
Jupyter

python script.py -t abnormal -p axial --prefix_name abc
args = parse_arguments( ["-t", "abnormal", "-p", "axial", "--prefix_name", "abc"] )

顺便说一句:

sys.argv.append()
sys.argv.extend()
console/terminal

有一个模块
shlex
用于拆分参数,参数中有空格
-msg“Hello World”

正常的
text.split(“”
将创建不正确的列表
['-msg'、''Hello'、'World']


shlex.split(text)
将创建正确的列表
['-msg','Hello World']

如何运行它?您应该在console/terminal
python script.py-t normal-p axial--prefix_name abc
中运行它,而不是在
jupyter
中运行它。或者在
jupyter
中,使用参数列表
parser.parse_args([“-t”,“异常”,“-p”,“轴向”,“--prefix_name”,“abc”))
sys.argv[1:] = ["-t", "abnormal", "-p", "axial", "--prefix_name", "abc"]
if __name__ == "__main__":

    sys.argv[1:] = ["-t", "abnormal", "-p", "axial", "--prefix_name", "abc"]

    args = parse_arguments()
    run(args)
def parse_arguments(arguments=None):

    # ... code ...

    args = parser.parse_args(arguments)
args = parse_arguments()
args = parse_arguments( ["-t", "abnormal", "-p", "axial", "--prefix_name", "abc"] )