关于python:忽略def如果没有使用?

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")

如果命令行上没有提供特定的命令标志,则使用该值。

注意,您没有使用可选的位置参数,而是使用可选的常规参数(这是默认行为)。