[英]Unrecognized arguments exception when importing from Python script in Jupyter notebook
我不確定這是一個錯誤還是我做錯了什么。
我有一個獨立的 python 腳本,它使用 argparse 從命令行啟動。
我把它弄傻了一點,但這本質上是腳本:
測試.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-i", "--inputfile", type=str, default=None,
help="filename containing input data")
parser.add_argument("-o", "--outputfile", type=str, default=None,
help="filename to save output data to")
args = parser.parse_args()
def step_test_experiment(inputs_filename=None, outputs_filename=None):
print(inputs_filename, outputs_filename)
if __name__ == '__main__':
if args.outputfile is None:
outputs_filename = "tclab_dyn_data.csv"
else:
outputs_filename = args.outputfile
step_test_experiment(args.inputfile, outputs_filename)
當我在 Jupyter 筆記本中嘗試以下操作時:
from test import step_test_experiment
我得到:
usage: ipykernel_launcher.py [-h] [-i INPUTFILE] [-o OUTPUTFILE]
ipykernel_launcher.py: error: unrecognized arguments: -f /Users/billtubbs/Library/Jupyter/runtime/kernel-df168fd5-a7f9-4258-b106-0e4582601e79.json
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2
//anaconda3/envs/torch/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3334: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
%tb
產生:
---------------------------------------------------------------------------
SystemExit Traceback (most recent call last)
<ipython-input-1-14c395429157> in <module>
----> 1 from test import step_test_experiment
~/dd-temp-control/test.py in <module>
6 parser.add_argument("-o", "--outputfile", type=str, default=None,
7 help="filename to save output data to")
----> 8 args = parser.parse_args()
9
10
//anaconda3/envs/torch/lib/python3.7/argparse.py in parse_args(self, args, namespace)
1750 if argv:
1751 msg = _('unrecognized arguments: %s')
-> 1752 self.error(msg % ' '.join(argv))
1753 return args
1754
//anaconda3/envs/torch/lib/python3.7/argparse.py in error(self, message)
2499 self.print_usage(_sys.stderr)
2500 args = {'prog': self.prog, 'message': message}
-> 2501 self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
//anaconda3/envs/torch/lib/python3.7/argparse.py in exit(self, status, message)
2486 if message:
2487 self._print_message(message, _sys.stderr)
-> 2488 _sys.exit(status)
2489
2490 def error(self, message):
SystemExit: 2
看起來 Jupyter kernel 在加載腳本時添加了一個“-f”參數。
任何想法是什么原因造成的?
如果,正如你在評論中所說,
在這種情況下,我實際上不想使用 argparser
解決方案是將整個參數解析塊移動到if __name__ == "__main__":
塊中,結果是:
def step_test_experiment(inputs_filename=None, outputs_filename=None):
print(inputs_filename, outputs_filename)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-i", "--inputfile", type=str, default=None,
help="filename containing input data")
parser.add_argument("-o", "--outputfile", type=str, default=None,
help="filename to save output data to")
args = parser.parse_args()
if args.outputfile is None:
outputs_filename = "tclab_dyn_data.csv"
else:
outputs_filename = args.outputfile
step_test_experiment(args.inputfile, outputs_filename)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.