Bom dia Estudante! Tudo bem com você?
Para resolver o erro atributo (AttributeError
) ao tentar usar o método upper()
em uma variável que pode serNone
, podemos utilizar uma verificação condicional para assegurar que só seja aplicado o método upper()
se a variável não for None
. Como no código apresentado abaixo:
if _profissao:
usuario._profissao = _profissao.upper()
else:
usuario._profissao = None
O código acima verifica se o atributo profissão foi informado (if _profissao
) caso tenha sido informado, o método upper()
é chamado, caso seja None
, não será chamado o método upper()
e será atribuído o valor None
a variável _profissao
. Aplicando o código no método construtor ficará da seguinte forma:
def __init__(usuario, _nome="", _profissao="", _idade=0) -> None:
if _nome:
usuario._nome = _nome.upper()
else:
usuario._nome = None
if _profissao:
usuario._profissao = _profissao.upper()
else:
usuario._profissao = None
usuario._idade = _idade
Pessoa.cadastro_pessoas.append(usuario)
Na imagem abaixo apresento o resultado após as modificações recomendadas, note o valor do campo profissão como "None".
Após realizar as modificações acima, salve o arquivo e execute-o novamente.
Para saber mais: Existe uma outra forma mais elegante que podemos implementar a verificação condicional, será utilizando uma expressão ternária que possui a seguinte sintaxe:
o_quero_fazer if se_esse_for_verdadeiro else faço_esse_se_for_falso
Aplicando no seu código:
usuario._profissao = _profissao.upper() if _profissao else None
No código acima, queremos chamar a função upper()
se _profissao
for verdadeiro caso não seja atribuímos None
. Aplicando esse conceito no construtor teremos o seguinte código:
def __init__(usuario, _nome="", _profissao="", _idade=0) -> None:
usuario._nome = _nome.upper() if _nome else None
usuario._profissao = _profissao.upper() if _profissao else None
usuario._idade = _idade
Pessoa.cadastro_pessoas.append(usuario)
Note que o código ficou mais enxuto. Caso queira aprofundar ainda mais no conhecimento sobre este assunto, recomendo a leitura deste artigom Operadores ternários em Python, que aborda sobre a utilização dos operadores ternários em Python para simplificar e encurtar as condições if/else
em uma única linha de código, destacando suas vantagens em termos de simplicidade e versatilidade.
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!