try:
----
---- AAA
----
except:
----
----
Um erro/exception em AAA interrompe o bloco e executa o except
NameError nome nao definido, variavel sem valorTypeErrorKeyError 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
passtry:
----
----
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 expressaoreturn 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