У меня есть аргумент для входного файла, и его легко обработать с помощью argparse
parser.add_argument( '-al', nargs = 1, type = argparse.FileType( 'r' ),
dest = 'alphabet' )
Этот параметр является необязательным, но если он опущен, мне все равно нужно получить этот входной файл, выполнив поиск в текущем каталоге. И если есть более одного или ни одного файла с расширением .al, я подниму ошибку, иначе откройте файл, который я нашел.
#if no alphabet look for .al file in current directory
if( args.alphabet == None ):
AlFiles = [ f for f in os.listdir( '.' )
if os.path.isfile( f ) and f.endswith( '.al' ) ]
#there should be one file with .al extension
if( len( AlFiles ) != 1 ):
sys.exit( 'error: no alphabet file provided and '
'there are more than one or no .al file in current directory, '
'which leads to ambiguity' )
args.alphabet = open( AlFiles[0], 'r' )
Есть ли способ выполнить это с помощью argparse, возможно, с параметрами по умолчанию или действиями. Если я выполняю поиск до разбора аргументов и возникает исключительная ситуация, я все равно не могу ее вызвать, потому что нужный файл может быть предоставлен аргументами командной строки. Я думал выполнить действие, если парсер не встретил нужный параметр, но не могу найти, как это сделать с помощью argparse.