Лучший питонный способ проверить, передан ли параметр в функцию или нет?Возможна ли встроенная проверка? - PullRequest
0 голосов
/ 24 апреля 2019

Я делаю простую функцию для отправки писем с помощью Mutt.Иногда мне нужно отправлять вложения, а иногда нет, поэтому мне нужно проверить, есть ли в параметре "attachment" что-то на нем.Прямо сейчас мой код выглядит следующим образом:

def sendMail(destino,asunto,cuerpo,adjunto):
    try:
        os.system('echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino)

Как правильно проверить, содержит ли «adjunto» (переменная вложения) что-то, и добавить «-a adjunto» к команде, только если есть вложение?Я знаю, что мог бы сделать регулярное выражение «если» и использовать другую os.system, если у меня есть какое-либо вложение, но я хочу знать, есть ли какой-нибудь способ сделать эту проверку встроенной.Что-то вроде "..... asunto + '"' + destino (('+' + adjunto), если adjunto = true) "

PS: я знаю, что код еще не закончен, но я хочузнать, как эффективно проверять вложения.

Ответы [ 4 ]

0 голосов
/ 24 апреля 2019
def sendMail(destino,asunto,cuerpo,adjunto = None):
    adjunto_mandato = ' -a ' + adjunto if adjunto is not None else ''
    mandato = 'echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino + adjunto_mandato

    try:
        os.system(mandato)
    except Exception as e:
        print(e)

Это самый простой «встроенный» способ, который я могу придумать, чтобы выполнить то, что вы просите.Я полагаю, вам нужно сбалансировать возможность читать ваш код и иметь его встроенным, потому что, если вы уроните блок Try, чего не следует делать, вы можете выполнить системный вызов в троичном операторе:

os.system (), если adjunto не является None else os.system ()

buenos suerte!

0 голосов
/ 24 апреля 2019

Вы можете сделать это так:

destino + ((" " + adjunto) if adjunto else "")

но вы, вероятно, не должны, если вы не очень уверены, что имя вложения действительно является именем файла, а не какой-либо вредоносной командой оболочки. И рассмотрите возможность использования модуля subprocess вместо os.system.

0 голосов
/ 24 апреля 2019

Вы можете использовать однострочный оператор if в Python: output if condition else other_output

Для вашего примера это выглядело бы так:

'-a {}'.format(adjunto) if adjunto != None else ''

Таким образом, ваш код может быть:

    adjunto = '-a {}'.format(adjunto) if adjunto != None else ''
    os.system('echo "' + cuerpo + '" | mutt -s "' + adjunto + '" ' + destino)
0 голосов
/ 24 апреля 2019

Вы можете использовать значение по умолчанию для adjunto, вы делаете это при определении функции следующим образом:

def sendMail(destino, asunto, cuerpo, adjunto=None):
    try:
        os.system('echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino)

Вы также можете использовать языковой хак с командой или:

adjunto=None
print(adjunto or 'a')

Output:
    a

Это ничего не добавит к строке, которую вы вводите.

Кстати, вы должны использовать функцию ''. format , она гораздо более питонна.

os.system('echo "{}" | mutt -s "{}" {}'.format(cuerpo, asunto, destino)
...