Só pra compartilhar como fiz mesmo.
Minha solução para abranger os números com ou sem código foi colocar um padrão para caso a primeira parte retornasse o None. Com isso, ela assumia que o código de país é 55 (Brasil).
def format_numero(self):
padrao = "([0-9]{2,3})?([0-9]{2})([0-9]{4,5})([0-9]{4})"
resposta = re.search(padrao, self._numero)
if resposta.group(1) == None:
numero_formatado = "+55 ({}){}-{}".format(resposta.group(2), resposta.group(3),
resposta.group(4))
else:
numero_formatado = "+{} ({}){}-{}".format(resposta.group(1), resposta.group(2), resposta.group(3),
resposta.group(4))
return numero_formatado