2.5 Scripting

Escrever e editar scripts, tendo até entradas de dadas externas (inputs) do usuário.

2.5.1 Conteúdo da aula

Essa lição abordou:

  • Python Installation and Environment Setup
  • Running and Editing Python Scripts
  • Interacting with User Input
  • Handling Exceptions
  • Reading and Writing Files
  • Importing Local, Standard, and Third-Party Modules
  • Experimenting with an Interpreter

2.5.2 Erros e Exceções

Os Syntax Erros são quando o “interpretador do código” não consegue interpretar o código, isto pode ser ocasionado por uma má digitação (famoso typo). Seguramente, esses erros podem ser corrigidos antes de executar o código.

Ao passo que as Exceptions são mais complexos, pois o “interpretador do código” conseguiu ler, mas há alguma inconsistência. Note que esse erro ocorre durante a execução do programa. Há diferentes tipos de exceptions:

2.5.2.1 ValueError

x = int(input("Digite um número: "))

Caso a entrada seja um texto, por exemplo, “ten”. Ocorrerá o problema de ValueError.

Tradução: Quando o objeto está correto, mas o valor declarado/passado como input é inapropriado para aquela função (built-in ou auela que criamos mesmo).

2.5.2.2 AssertionError:

Tradução: Quando uma condição assetiva falha…

2.5.2.3 NameError

# ValueError: Quando a variável a não foi declarada ainda
sum(a + 1)

2.5.2.4 IndexError:

teste = ["a","b"]

print(teste[100])

Ultrapassagem dos limites de uma lista.

2.5.2.5 TypeError

# TypeError: Tipo erro de quando soma _str_ com _int_
sum("a" + 1)

Tentar somar um str com um int. ********************************************************** ### Importing scripts

Geralmente todo script importado deve ser declarado, por convenção, no início do arquivo.

import my_script

O local desse script tem que ser no mesmo diretório.

meu_recente_trabalho.py
|
+-my_script.py

2.5.3 Built-in functions

Esta será um lista das funções e qualquer outra coisa que foi apresentado em sala de aula.

2.5.3.1 input()

qualquer_coisa = input("Escreva-me algo interessante: ")
print(str("Isso é interessante hein!") + qualquer_coisa)

Pode-se obter informações a partir de entradas usando o input. Esse dado de entrada pode ser transformado em int, float etc..

2.5.3.2 try()

try:     # Opção a prova de tonterías
    int(input("Digite um número legal: "))  # Digita um número aí... 51
except:  # Caso o operador faça uma burrada o script não vai interromper bruscamente
    print("Tá de sacanagem né!? Eu pedi um número e não uma string!")  # Vai chamar a atenção dele.

O try statement juntamente com o except() possibilitará que o programador utilize diferentes estratégias para contar possíveis problemas de inputs, neste caso exemplo, aparecerá apenas um aviso e nada mais, há a possibilidade de retornar a solicitar um número, mas esse deve ser feito com um loop while().

while True:  # Com esse loop o script fica teimoso, só sai quando o operador inserir um número.
    try:
        x = int(input("Digite um número legal: "))
        break # Depois de muita teimosia, por fim, digitou um número. Daí sai do While infinto.
    except:
        print("tá de sacanagem né!?")

print("Se você ler isso é que saiu do loop") # Só para enviar uma mensagem de aviso

Observe que se não fosse o try() este script teria sido interrompido.

2.5.3.3 except()

while True:
    try:
        x = int(input("Digite um número legal: "))
        break
    except ValueError:
        print("tá de sacanagem né!?")
      except KeyboardInterrupt:
        print("Apertou Ctrl+C")
        break
    finally:
        print("Digite um valor válido")

Note que o except() pode ter formas específicas de atuação:

  • ValueError: Quando um valor não esperado é atribuído, neste caso quando se digita um texto ao invés de um número;
  • KeyboardInterrupt: Quando se interrompe o script ao apertar o Ctrl+C.

2.5.3.4 finally()

while True:
    try:
        x = int(input("Digite um número legal: "))
        break
    except:
        print("tá de sacanagem né!?")
    finally:
        print("Digite um valor válido")

O finally() será executado sempre caindo no try() ou no except(). Não vi muita utilidade agora, mas em breve entenderei mais sobre o uso dele. A Juno Lee disse que há um uso muito interessante para os casos de usar o try() para carregar (load) arquivos, pois quando isso é feito (não sei o porquê) abre-se alguma coisa (ótimo hein) e o finally() serviria para fechar essa “abertura”.

Lendo o link do Stack, pode ser útil quando há um return no except, neste caso o finally() será executado antes do return.

2.5.3.5 open()

data = open("path/file.txt","r")  # Carregando um arquivo txt localizado pelo path.
                                  # O argumento "r" significa read only.
dataset = data.read()
data.close()

O resultado do open() será um file object, caso seja necessário alguma alteração neste arquivo que é apenas leitura, pode-se usar o method .read() para acessar o conteúdo desse arquivo.

Ressalta-se também que o argumento pode ser alterado para w, o que significa que o arquivo estará sendo aberto para ser gravado. Tenha cuidado porque o conteúdo desse arquivo será deletado para ser sobreescrito. O method usado para a gravação é o .write().

2.5.4 Methods

2.5.4.1 .read()

data = open("path/file.txt","r")  # Carregando um arquivo txt localizado pelo path.
                                  # O argumento "r" significa read only.
dataset = data.read()
data.close()

Este method transforma o file object numa string, sendo assim possível a edição e análise.

2.5.4.2 .close()

data = open("path/file.txt","r")  # Carregando um arquivo txt localizado pelo path.
                                  # O argumento "r" significa read only.
dataset = data.read()
data.close()

Não me pergunte o por quê, mas se deve fechar o open() e por isso que tem essa coisa aqui. Caso isso fique aberto, haverá um uso desnecessário de memória para mantê-lo aberto.

2.5.4.3 .write()

Serve para gravar um arquivo tipo txt.

 

A work by AH Uyekita

anderson.uyekita[at]gmail.com