Как запустить parse_args () в блокноте jupyter?Получение ошибки SystemExit: 2 - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь сделать это руководство по Gooey GUI: , и я буквально не могу пройти первый блок кода, где он анализирует аргументы.Я пробовал Spyder и Jupyter и застрял в этом блоке в течение часа:

from argparse import ArgumentParser

parser = ArgumentParser(description='Create Quarterly Marketing Report')
parser.add_argument('data_directory',
                        action='store',
                        help="Source directory that contains Excel files")
parser.add_argument('output_directory',
                        action='store',
                        help="Output directory to save summary report")
parser.add_argument('cust_file',
                        action='store',
                        help='Customer Account Status File')
parser.add_argument('-d', help='Start date to include')
args = parser.parse_args()

Моя ошибка:

usage: ipykernel_launcher.py [-h] [-d D]
                             data_directory output_directory cust_file
ipykernel_launcher.py: error: the following arguments are required: data_directory, output_directory, cust_file
An exception has occurred, use %tb to see the full traceback.

SystemExit: 2

Полная трассировка:

---------------------------------------------------------------------------
SystemExit                                Traceback (most recent call last)
<ipython-input-24-28f93e96a3df> in <module>
----> 1 args = parser.parse_args('')

~\Anaconda3\lib\argparse.py in parse_args(self, args, namespace)
   1747     # =====================================
   1748     def parse_args(self, args=None, namespace=None):
-> 1749         args, argv = self.parse_known_args(args, namespace)
   1750         if argv:
   1751             msg = _('unrecognized arguments: %s')

~\Anaconda3\lib\argparse.py in parse_known_args(self, args, namespace)
   1779         # parse the arguments and exit if there are any errors
   1780         try:
-> 1781             namespace, args = self._parse_known_args(args, namespace)
   1782             if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
   1783                 args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))

~\Anaconda3\lib\argparse.py in _parse_known_args(self, arg_strings, namespace)
   2014         if required_actions:
   2015             self.error(_('the following arguments are required: %s') %
-> 2016                        ', '.join(required_actions))
   2017 
   2018         # make sure all required groups had one option present

~\Anaconda3\lib\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\lib\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 или Spyder?

edit: не уверен, что это какая-то помощь, но вывод sys.argv:

['C:\\Users\\s\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py',
 '-f',
 'C:\\Users\\s\\AppData\\Roaming\\jupyter\\runtime\\kernel-cc697613-14f5-4979-a353-6112886aba45.json']

1 Ответ

0 голосов
/ 25 сентября 2019

В записной книжке или интерактивном сеансе вы можете протестировать установку argparse с помощью

args = parser.parse_args('dir1 dir2 foobar'.split())
print(args)

parse_args(), анализируя список sys.argv[1:], полученный из команды оболочки.Чтобы посмотреть на это, используйте:

import sys
print(sys.argv)

Скорее всего, вы увидите строки, которые относятся к jupyter серверу.

Когда вы предоставляете список, он анализируется, а не по умолчанию.

Вы даже можете использовать args = argparse.Namespace(foo='bar', x=2).args просто нужно иметь атрибуты, которые ожидает остальная часть кода.

...