#python #if-statement
#python #if-statement
Вопрос:
Я пытаюсь получить дату истечения срока действия из строки с помощью функции следующим образом
p = 'Chiet TS Officer ~ aenOriginal Registration Date: 1998-06-17 ective Date: 2018-06-20nnLatest Revision Date: 2018-05-24 Expiry Date: 2021-06-19nPage: 1 of 1nn nn.. making excellence a habit”nx0c'
def enddate(p):
for line in p.lower().split('n'):
if "exp" in line:
try:
return(str(dparser.parse(line.split("exp")[-1],fuzzy=True))[0:10])
except:
try:
return(str(dparser.parse(line),fuzzy=True))[0:10]
except:
return(str(dparser.parse(line.split("20")[-1],fuzzy=True))[0:10])
elif "20" in line:
try:
return(str(dparser.parse(line.split("20")[-1],fuzzy=True))[0:10])
except:
return("error")
enddate(p)
'error'
вы видите, что elif
это обойдено if
, если бы я удалил elif
часть, она работала бы хорошо
p = 'Chiet TS Officer ~ aenOriginal Registration Date: 1998-06-17 ective Date: 2018-06-20nnLatest Revision Date: 2018-05-24 Expiry Date: 2021-06-19nPage: 1 of 1nn nn.. making excellence a habit”nx0c'
def enddate(p):
for line in p.lower().split('n'):
if "exp" in line:
try:
return(str(dparser.parse(line.split("exp")[-1],fuzzy=True))[0:10])
except:
try:
return(str(dparser.parse(line),fuzzy=True))[0:10]
except:
return(str(dparser.parse(line.split("20")[-1],fuzzy=True))[0:10])
enddate(p)
'2021-06-19'
так почему же это происходит? и как я могу заставить свою функцию искать "20"
только в том случае, если все line
s не содержат "exp"
?
Комментарии:
1. итак, в чем ваша ошибка??
2. Это
elif
приведет к тому, что ваша функция вернется из итерации цикла для первых «20» —line
. Удалениеelif
приведет к тому, что ваш цикл достигнет более позднегоline
с"exp"
в нем, и только тогда вернется.3. @JayPeerachai Я упоминал, что он был?, @schwobaseggl Но что, если я хочу, чтобы моя функция искала
"20"
только в том случае, если всеline
s не содержат"exp"
?
Ответ №1:
Просто потому, что «2018» находится на второй строке, а «expiration» — на третьей. Итак, в вашем случае # 2, в первой строке ничего не происходит, во второй строке вы вводите условие elif, и оно возвращает ошибку. В случае # 1 ничего не происходит до третьей строки, а затем вы вводите первое условие if.
Комментарии:
1. Ох. Понял, но я хочу, чтобы моя функция искала
"20"
только в том случае, если все строки не содержат"exp"
, как я могу это сделать?2. Наивным решением было бы просто сначала выполнить итерацию по всем строкам, ища только «exp», и тогда и только тогда, когда вы не найдете «exp» ни в одной из строк, затем вы можете повторить по всем строкам, которые теперь ищут «20».
3. Вероятно, лучшим решением было бы просто выполнить поиск «exp» в исходной строке (без разделения) и начать цикл по строкам, если вы его не найдете.