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
noexcept
, neste caso ofinally()
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