[Resolvido] Meu Try Except não Está Executando por Qual Motivo?

Bom dia.
Neste código abaixo, mesmo com o except sendo apenas ‘except:’:

stringExpressão = str(input('Digite uma expressão que use parênteses. '))
ehValida = False
resultadoExpressao = 0
try:
    resultadoExpressao = float(stringExpressão)
    print(f'Dentro do try, Resultado Expressão é {resultadoExpressao}')
    ehValida = True
except Exception as e:
    ehValida = False

O print dentro do try não é excecutado e nada além dele também .
O resultado, onde preciso do valor da variável resultadoExpressao é igual a zero.

E aí @LeandroCGMS, tudo bem?

Você não precisa usar a método str() nesta linha, pois o método input() retorna uma string.

Realmente não é executado, pois na linha anterior ele não consegue fazer a conversão para float e consequentemente pula para a cláusula except.

Como você não está tratando seu Exception e, você não pode visualizar nenhum erro, em outras palavras faça:

[...]
except Exception as e:
    ehValida = False
    print(e)

Caso queira o erro customizado (vermelho), você pode usar o módulo sys.

import sys

[...]
except Exception as e:
    ehValida = False
    sys.stderr.write(str(e))

Agora você pode visualizar seus erros e consequentemente trata-los .

Abraços!

1 curtida

@LeandroCGMSstringExpressão = str(input('Digite uma expressão que use parênteses. '))
ehValida = False
resultadoExpressao = 0
try:
resultadoExpressao = float(stringExpressão)
print(‘Dentro do try, Resultado Expressão é {resultadoExpressao}’)
ehValida = True
except Exception as e:
ehValida = False

faça isso sem o f que está no print

1 curtida

E aí @Ariadne3512, tudo bem?!

A sintax abaixo não está correta, visto que, ele quer imprimir o valor da variável resultadoExpressao e não {resultadoExpressao}.

print('Dentro do try, Resultado Expressão é {resultadoExpressao}')
#SAIDA: Dentro do try, Resultado Expressão é {resultadoExpressao}

O print() com o f na frete da string é equivalente o print() com o .format().

print(f'Dentro do try, Resultado Expressão é {resultadoExpressao}')
print('Dentro do try, Resultado Expressão é {}'.format(resultadoExpressao))

Outra maneira de usar o print() é:

print('Dentro do try, Resultado Expressão é %s' %resultadoExpressao)

Ou ainda:

print('Dentro do try, Resultado Expressão é', resultadoExpressao)

Outra maneira de imprimir os dados na tela é usando o módulo sys, observe:

import sys
sys.stdout.write('Dentro do try, Resultado Expressão é ' + str(resultadoExpressao))

Em outras palavras, a sintax utilizada pelo @LeandroCGMS está perfeitamente correta.

Abraços!

1 curtida

@Tuna eu quando executei ele deu erro nessa linha, depois de eu tirar o f deu certo

2 curtidas

Surge, agora, um problema desse outro acima, se eu digito umaVariavel = ((5+4) /2) + ((5+5) / 3), o python resolve, mas se eu colocar uma string com esta expressão na variável dentro do método float, exemplo, umaVariavel = float(variavelQueContemAExpressaoEmString) dá erro de conversão, erro, ValueError: could not convert string to float: ‘5+4 /2 + 5+5 /3’.
Que tipo é este sem aspas, mas em formato de texto?

Que estranho :thinking:
Provavelmente deve ser a versão do seu Python, essa função com f é digamos “recente”, ou em ultimo caso pode ser um bug no interprete. Desculpa qualquer coisa, muito obrigado caro @Ariadne3512!

Então, esse problema se dá pelo simples fato de "5+4 /2 + 5+5 /3" ser diferente de 5+4 /2 + 5+5 /3, em outras palavras, "5+4 /2 + 5+5 /3" é uma string, e não um número, o Python está vendo que você quer converter uma string com caracteres especiais em float, e isso não tem como, por isso ele lança o erro: ValueError: could not convert string to float: '5+4 /2 + 5+5 /3', basicamente ele está dizendo, não posso converter essa string em float, pois ela não é digito. Agora 5+4 /2 + 5+5 /3, (sem aspas) é uma simples conta matemática que é igual a 13.666667, se "13.666667" é uma string agora sim você pode converter a mesma em float, pois o Python verá que é um digito e realizará a conversão.

Como já dito acima, é uma string com caracteres especiais.

Como resolver?!
Existem duas maneiras, uma mais trabalhosa, mas segura; E outra mais fácil, mas perigosa.
No seu caso, a maneira mais fácil, não vai te trazer nenhum risco, basta você usar a função eval(). Adicione o eval() na conversão para float e problema resolvido, observe:

resultadoExpressao = float(eval(stringExpressão)) #Esta linha resolve seu problema.

Obs.: Cuidado com o uso do eval(), é uma função que poderosa, mas que pode ser muito maléfica, segue os link’s com as referência abaixo:
Eval - Documentation
Eval really is dangerous

1 curtida