try:
----
---- AAA
----
except:
----
----
Um erro/exception em AAA interrompe o bloco e executa o except
NameError
nome nao definido, variavel sem valorTypeError
KeyError
chave não existe no dicionarioIndexError
index numa listaMemoryError
nao consegue alocar memorialista de exceptions predefinidas
user defined exceptions
Diferentes tratamentos para diferentes exceptions
try:
---
except TypeError:
---
except (KeyError,IndexError):
---
except:
---
try:
----
except:
----
else:
--- so executa se nao houve exception
try:
----
except A:
----
finally:
--- sempre executa mesmo que tenha exceptions que nao foram pegas
Como levantar uma exception: raise
Como definir sua propria exception
https://docs.python.org/3/tutorial/errors.html
pass
try:
----
----
except:
pass
try:
dic[x]+=1
except:
dic[x]=1
em vez de
if x in dic:
dic[x]+=1
else:
dic[x]=1
Exceções vão interrompendo a execução dos contextos (funções - pilha de execução) até que um except
capture a exceção
O ambiente iterativo ou o ambiente em batch capturam todas as exceções que chegam neles - no ambiente em batch o programa é terminado. No iterativo so a pilha de execução é interrompida.
def func(a,b,linha):
''' descricao
descricao'''
----
----
----
return c
return expressao
return a,b
- tuplareturn None
permite que a funçao seja chamada como procedimento/comandodef f(x):
----
return None
f(4)
def askok(prompt, retries=4, reminder='Please try again!'):
----
prompt
é obrigatório
askok('Do you really want to quit?')
askok('Do you really want to quit?',2)
askok('Do you really want to quit?',2,'Sim ou nao')
Cuidado: o default so é avaliado uma vez (quando??)
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(10))
print(f(30))
askok('Do you really want to quit?',2,'Sim ou nao')
ou chamada por nome
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
def somatoria(*lista):
soma=0.0
for x in lista:
soma+=x
return soma
Não há declaracao de variáveis entao vc não sabe só vendo se uma variavel é local ou global
Uma variavel é em principio local se a função atribui um valor a ela
x=0
y=10
def f():
x=100
print(x+1)
print(y+1)
f()
print(x)
x
é local na funçao, y
é global
Onde a variavel é atribuida não é importante
x=0
y=10
def f():
print(x+1)
print(y+1)
if False:
x=100 % nunca é executado!
f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in f
UnboundLocalError: local variable 'x' referenced before assignment
ATENCAO: Modificar uma variavel mutavel não é atribuir um valor a ela
l={'a':1,'b':2,'c':3}
def ff():
l['x']=44 # l é global
ff()
print(l)
a declaraçao global
indica que a variavel sera global
x=0
def f():
global x
x=100
print(x+1)
print(y+1)
f()
x
def fora(x):
----
def dentro(y):
---
z = x+y
return z
---
x
é local a fora
mas é global para dentro
O mais correto é dizer que x
é não-local para dentro
def fora(x):
z=10
def dentro(y):
z = x+y
z
é local a dentro
def fora(x):
z=10
def dentro(y):
nonlocal z
z = x+y
z
é o z de fora
(mas z não é global).
z=100
def fora(x):
z=10
def dentro(y):
global z
z = x+y
def gg():
def aux(l):
l.reverse()
return l
return aux
def gera():
x=0
def aux():
nonlocal x
x +=1
print(x)
return aux
a = gera()
a()
a()
x
x
é uma variavel local de gera
e não local de aux
mas que se mantem viva por todo o programa