ignore a def if not in use?
我有下面的剧本-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import os, errno import argparse def removecompressed(filename): try: os.remove(filename) print('Removing {}'.format(args.compressedfile)) except OSError as e: # this would be"except OSError, e:" before Python 2.6 print ('File {} does not exist in location {}!'.format(args.compressedfile, args.localpath)) if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory raise # re-raise exception if a different error occured def removeencrypted(filename): try: os.remove(filename) print('Removing {}'.format(args.encryptedfile)) except OSError as e: # this would be"except OSError, e:" before Python 2.6 print ('File {} does not exist in location {}!'.format(args.encryptedfile, args.localpath)) if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory raise # re-raise exception if a different error occured parser = argparse.ArgumentParser() parser.add_argument('-p', '--localpath', type=str, default='', help="the path containing the files") parser.add_argument('-c', '--compressedfile', type=str, default='', help="the compressed file to be deleted") parser.add_argument('-e', '--encryptedfile', type=str, default='', help="the encrypted file to be deleted") args = parser.parse_args() removecompressed(args.localpath + args.compressedfile) removeencrypted(args.localpath + args.encryptedfile) |
但我希望-e和-c参数是可选的。我该怎么做呢?
我理解此回复:argparse可选位置参数?
但问题是,def首先将两个字符串一起解析以生成文件名。如果我删除其中一个参数,它会抱怨添加了一个字符串和一个none值。
编辑-如果我使用所有3个参数,没有问题。例如,如果我删除了-e或-c,我就删除了-e,得到以下异常-
1 2 3 4 | Traceback (most recent call last): File"cleanup.py", line 35, in <module> removeencrypted(args.localpath + args.encryptedfile) TypeError: Can't convert 'NoneType' object to str implicitly |
我已更新参数以包含默认值='
从您的问题来看,如果没有提供其中一个参数,应该发生什么是不清楚的,但原则上,您可能希望提供一个默认值:
1 | parser.add_argument('-c', '--compressedfile', type=str, default='', help="the compressed file to be deleted") |
如果命令行上没有提供特定的命令标志,则使用该值。
注意,您没有使用可选的位置参数,而是使用可选的常规参数(这是默认行为)。