Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

04.06 Onde está o erro? dúvida

Esse código gera exception:

try:
  aumento = list(map(lambda x: x[1] * 1.1, funcionarios.values()))
except Exception as e:
  print(type(e), f'Erro: {e}')
else:
  print(aumento)
finally:
  print("Processo concluido!")

porém se eu trocar funcionarios.values por funcionarios.items o código funciona. Não consegui entender o porque com 'items' o código funciona. Em ambos os casos os valores não são inteiros, por que só funciona com 'funcionarios.items' ?

2 respostas
solução!

Olá, Mário! Como vai?

O código:

funcionarios = {'José': 2000, 'Ana': 2200,'João': 2500, 'Maria': 3800}

try:
  aumento = list(map(lambda x: x[1] * 1.1, funcionarios.values()))
except Exception as e:
  print(type(e), f'Erro: {e}')
else:
  print(aumento)
finally:
  print("Processo concluido!")

Não funciona porque você está tentando acessar o índice [1] do valor de x em lambda x: x[1] .

E já que você está iterando sobre funcionarios.values(), a variável x é cada valor de funcionarios: 2000, 2200 e 3000.

Sendo que cada valor desse é do tipo int (inteiro), logo não pode ser subdivido em índices (como é possível com strings e listas). Por isso o erro <class 'TypeError'> Erro: 'int' object is not subscriptable é gerado. Traduzindo: O objeto 'int' não é subscritível.

Então a correção para esse código seria:

funcionarios = {'José': 2000, 'Ana': 2200,'João': 2500, 'Maria': 3800}

try:
  aumento = list(map(lambda x: x * 1.1, funcionarios.values()))
except Exception as e:
  print(type(e), f'Erro: {e}')
else:
  print(aumento)
finally:
  print("Processo concluido!")

Agora sim, a variável x está sendo por si só cada valor dos funcionários e não estamos tentando acessar o índice de um inteiro.

Por fim, o código:

funcionarios = {'José': 2000, 'Ana': 2200,'João': 2500, 'Maria': 3800}

try:
  aumento = list(map(lambda x: x[1] * 1.1, funcionarios.items()))
except Exception as e:
  print(type(e), f'Erro: {e}')
else:
  print(aumento)
finally:
  print("Processo concluido!")

Funciona normalmente porque você está iterando sobre cada item.

E quando o código analisa o item 'José': 2000, por exemplo, o índice [1] é justamente o 200.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Obrigado