Diciamo che abbiamo una funzione che controlla se un certo schema si verifica in una stringa. Il comportamento predefinito è che se il modello corrisponde, restituisce il modello. Fin qui tutto bene, ma qual è il modo consigliato per gestire il caso in cui il modello non corrisponde. Ci sono molte alternative ovviamente ma posso elencarle due:
- Restituisci
None
e poi gestisciNone
dall'ambiente chiamante - Aumenta (o lancia) un
Error
(diciamoNoParagraphNumberError
) e gestisci l'errore dall'ambiente chiamante.
Nel seguente codice, restituisco None
ma è preferibile lanciare un Error
, ad es. perché aumenterà la leggibilità, la manutenibilità del codice o per qualsiasi altro motivo?
import re
BASIC_CASE_PATTERN = r'\d{1,6}/\d+'
BASIC_PARAGRAPH_PATTERN = ur'(paras?(\W|\s)|paragraphs?)'
def check_case_citation(citation_string):
"""
Check the citation string for occurence of patterns
Returns:
str: if just a case number is found
None: if no case number is found or the citation includes paragraph numbers
"""
paragraph = re.compile(BASIC_PARAGRAPH_PATTERN)
casepattern = re.compile(BASIC_CASE_PATTERN)
match = re.search(casepattern, citation_string)
#1. entries with case number(s) but no paragraph given
if match and re.search(paragraph, citation_string) is None:
return match.group()
else:
return None
print check_case_citation("Case 145/80") # 145/80
print check_case_citation("Case 145/80 paragraph 3") # None