Utilizando Python para verificar se uma string é numérica

Overview
Se você é um programador Python procurando uma maneira rápida e eficiente de verificar se uma string é um número, este post é para você! Com uma abordagem descontraída, vamos explorar métodos simples para realizar esta tarefa, cobrindo desde validações de números inteiros até desafios mais complexos, como números negativos e com casas decimais. Prepare-se para adicionar mais uma ferramenta útil ao seu kit de desenvolvimento Python.
A vida de um programador é cheia de tarefas repetitivas, uma delas é verificar se uma string (ou o input do usuário) é um número ou não. Este post mostrará algumas formas de fazer isso em Python, ou seja, vai ser rápido e fácil. 🙂
Os exemplos foram escritos utilizando a o prompt, mas se você quiser o fonte deles, está disponível no meu github.
A primeira forma de descobrir é utilizando a função isdigit da propria string, conforme exemplo abaixo:
1>> string_var.isdigit()
2False
3
4>>> string_var = "123"
5>>> string_var.isdigit()
6True
7
8>>> string_var = '-321'
9>>> string_var.isdigit()
10False
11
12>>> string_var = "1.23"
13>>> string_var.isdigit()
14False
Como pode ser percebido, esta função retornou true apenas quando a string era inteiramente composta por números. Qualquer coisa diferente de 0,1,2,3,4,5,6,7,8 e 9 retorna falso. Isso pode ser útil se você precisar fazer uma validação simples de um campo, que só pode receber números inteiros e positivos.
Todavia, é um pouco limitado se precisarmos validar números com casas decimais ou mesmo números negativos. Para resolver estes casos, existe uma abordagem um pouco diferente, conforme demonstrado abaixo:
1>>> def is_number(num):
2...
3... """Tests to see if arg is number. """
4...
5... try:
6... #Try to convert the input.
7... float(num)
8...
9... #If successful, returns true.
10... return True
11...
12... except:
13... #Silently ignores any exception.
14... pass
15...
16... #If this point was reached, the input is not a number and the function
17... #will return False.
18... return False
19...
20
21>>> string_var = "raccoon ninja"
22>>> is_number(string_var)
23False
24
25>>> string_var = "123"
26>>> is_number(string_var)
27True
28
29>>> string_var = "-123"
30>>> is_number(string_var)
31True
32
33>>> string_var = "-1.23"
34>>> is_number(string_var)
35True
36
37>>> string_var = "1.23"
38>>> is_number(string_var)
39True
Se declararmos uma função que tenta converter a variável string para float, conseguimos cobrir os casos de teste que não foram incluídos na utilização do isdigit. Realizei diversas pesquisas, mas parece que esta forma é a mais comum de ser feita e não gera impacto negativo na performance da aplicação (pendente de testes. estou acreditando no que li.)
Espero ter ajudado.