Felipe Albrecht's picture

Nova versão da Linguagem Python

Foi lançado no dia primeiro de outubro a versão 2.6 da linguagem Python. Esta nova versão acrescenta melhorias na linguagem, mas sem quebrar a retrocompatibilidade, como acontecerá com a versão 3.0.

A linguagem Python é especialmente interessante devido à sua simplicidade. Não necessita de conhecimentos sobre ponteiros, alocação de memória, e nem sobre técnicas rebuscadas de orientação a objetos, sendo indicada tanto para a criação de pequenos programas e scripts como grandes sistemas onde é necessário utilizar rede, banco de dados e trabalhar com muitos dados.

A versão 2.6 possui um novo pacote, multiprocessing para a criação e sincronização de diferentes processos, similar ao threading. Também foi adicionado à linguagem a palavra chave 'with', que tem funcionamento similar ao 'try..catch' no sentido de limpar os dados e muito útil na gerência de contextos. Realmente há varias novidades que podem ser lidas no anúncio da nova versão.

O download pode ser feito aqui e diversos documentos, tutoriais para programadores de outras linguagens e para quem nunca programou podem ser acessados aqui.

0

manuelB's picture

Parabéns pelos posts relevantes.
Utimamente aqui no MB tem muitos posts só pra gerar polêmica(leia-se pageview) religiao, Freetarxwintardxappletard, hábitos internéticos do presidente etc.. Mas os teus posts tem sido bem mais informativos.
Sobre Python, ainda não tive oportunidade de usar, mas pelo jeito tá cada vez melhor, vou ter que usar em algum lugar.
_____________________________________
Dodge this!

Tambem notei o acrescimo de qualidade, notei ainda a falta de comentarios nos mesmos.

:: Lugar de Homem é na Cozinha ::
http://lugardehomem.com

garoa's picture

Em posts informativos, a pessoa lê, se informa e dá o fora. Em posts polêmicos, a pessoa se sente tentada a dar seu pitaco e, assim, grandes flames se formam rapidamente.

Bandeira's picture

Parabéns pelos posts relevantes. [2]

Ta parecendo a fase que o Meio Bit era legal, na época do kioshi.

monthiel's picture

Parabéns pelo post, e parabéns pelo comentário Manuel.. matou a pau...

Abraços,

E não esqueçam, visitem o:
Blog do Monthiel

Felipe Albrecht's picture

Manuel, obrigado pelo comentario! Fico contente com isso, tentarei manter o nivel e melhora-lo ainda.
Sobre e prefiro ficar longe de discussões de que linguagem/os/mp3player/revistaporno/marcadecomputador é melhor baseando-se apenas em 'achismos'.

Felipe não estou querendo depreciar seus posts nem nada, mas nem todo mundo (como eu) sabe o que é um valor try..catch ou algo assim. Eu ACHO que você poderia ter uma abordagem um pouco mais abrangente, porque nos seus últimos posts eu (e acredito que muitos outros leitoes) ficamos boiando.

O pai de Steve Wozniak fazia isso, ele explicou eletrônica para uma criança de 4 anos.

-

ONCE YOU GO MAC, YOU NEVER GO BACK.

Bullshico's picture

Bem, é um post sobre uma linguagem de programação... Se você não é programador, não deveria se importar o que é try, catch, with, while, etc... Acho que seria como eu pedir para que os posts de câmera digitais aqui não falem de lentes, etc, etc, porque eu não entendo NADA disso...

Anyway, é sempre tempo para aprender:
http://en.wikibooks.org/wiki/Python_Programming/Ex...
http://en.wikibooks.org/wiki/Programming:Python

Cobalto's picture

Os artigos de câmeras eu passo direto. Sad

-----------------------------------------

"Em todo o caso, casai-vos. Se vos couber em sorte uma boa esposa, sereis felizes; se vos calhar uma má, tornar-vos-eis filósofos, o que é excelente para os homens". - Sócrates

H123er's picture
Bullshico disse:

Bem, é um post sobre uma linguagem de programação... Se você não é programador, não deveria se importar o que é try, catch, with, while, etc... Acho que seria como eu pedir para que os posts de câmera digitais aqui não falem de lentes, etc, etc, porque eu não entendo NADA disso...

Anyway, é sempre tempo para aprender:
http://en.wikibooks.org/wiki/Python_Programming/Ex...
http://en.wikibooks.org/wiki/Programming:Python

Concordo com você, ia ressaltar justamente isso. existem os tópicos sobre câmeras, eu passo por lá mas nunca fico pitando porque não entendo nada, então consequentemente terão tópicos que agradarão mais uns do que outros. Eye-wink

***********************************************************
__________________________________________________________

"Nada é Impossivel o Impossivel Só demora mais um Pouco"

H123er's picture
lookez disse:

Felipe não estou querendo depreciar seus posts nem nada, mas nem todo mundo (como eu) sabe o que é um valor try..catch ou algo assim. Eu ACHO que você poderia ter uma abordagem um pouco mais abrangente, porque nos seus últimos posts eu (e acredito que muitos outros leitoes) ficamos boiando.

O pai de Steve Wozniak fazia isso, ele explicou eletrônica para uma criança de 4 anos.

-

ONCE YOU GO MAC, YOU NEVER GO BACK.

Só ressaltando o que o própio Felipe deixou bem claro no primeiro post dele de apresentação, que os posts seriam mais técnicos ou seja, não dá para agradar a gregos e troianos muita gente vai gostar muita gente não vai entender, não tem como explicar digamos as linhs de código se você não sabe o que está relacionado a elas. Eye-wink

***********************************************************
__________________________________________________________

"Nada é Impossivel o Impossivel Só demora mais um Pouco"

Felipe Albrecht's picture

Opa!
Ah... eu tento explicar o melhor possivel, mas resumidamente, try..catch é usado quando ocorre alguma excessão, por exemplo: tinhas alguns dados e fosse salvar no banco de dados e a conexão caiu. Da para reverter as operacoes usando isso. É apenas um exemplo, mas da uma olhada nos tutoriais de python que tem no post que tenho certeza que conseguiras entender.

Bullshico's picture

Ham.. Qual a semelhança entre try...catch e with? Para mim, parecem ser coisas beeem diferentes (eu não li profundamente o changelog também, anyway)...

Edit: E try...catch é java, né? Sticking out tongue

H123er's picture
Bullshico disse:

Ham.. Qual a semelhança entre try...catch e with? Para mim, parecem ser coisas beeem diferentes (eu não li profundamente o changelog também, anyway)...

Edit: E try...catch é java, né? Sticking out tongue

Não conheço muitas linguagens, mas try é o inicio de uma parte da linha de código que ira tratar de erros como divisão por zero entre outros, e o catch faz a função de retornar que houve um erro de digitação como colocar seu nome na data de nascimento, o with faz praticamente a mesma coisa só que na linguagem Phyton... Eye-wink
Se estiver errado me corrijam por favor.

***********************************************************
__________________________________________________________

"Nada é Impossivel o Impossivel Só demora mais um Pouco"

Try... Catch trabalha em conjunto:
try
[seu Codigo aqui]
catch // ops... deu erro!
[tratamento do erro aqui]
Isso evita que o programa aborte inesperadamente, deixando o usuário sem saber o que houve. No visual basic tem algo como "OnError GoSub ou Goto", em Object Pascal (vulgo Delphi), tem "try ... except".

sricanesh's picture

Pelo que entendi no link http://python.about.com/od/gettingstarted/qt/py25W... o with é semelhante ao comando using do C# (não o using para importar namespaces)

Com esse comando se garante a execução de um bloco de código e sua saída correta.
Normalmente é usado em operações de IO para garantir que recursos externos sejam corretamente fechados.
Por exemplo

SqlConnection conn = new SqlConnection("string de conexao");
// operacoes com o banco...
conn.Dispose()

Se acontecer algum problema na linha //operacoes com o banco, é disparada uma excessão e não passamos pela linha que deveria liberar a conexão, sem contar que o programador pode esquecer também de chamar o conn.Dispose ou fazer um desvio de fluxo que impeça de passar por essa linha

No c#, resolvemos isso com o using:

using (SqlConnection conn = new SqlConnection())
{
//operacoes com o banco
}

com isso, garante-se que SEMPRE, em QUALQUER SITUAÇÃO, o recurso será liberado, mas para isso, a classe deverá implementar a interface IDisposable.

Na real, o compilador coloca um bloco Try..Catch..Finally em torno do bloco.

Podemos usar o Try...Catch... Finnaly tb, mas são mais linhas de código e o código fica menos "clean"

Lembrando que "Catch" trata eventuais excessões e em "Finnaly" colocamos um codigo que sempre deverá ser executado, independente de ocorrer ou não um erro.

Cassio R Eskelsen

Bullshico's picture

Muito obrigado, sricanesh! Agora a comparação faz todo sentido para mim! Laughing out loud

Eu estava pensando nos blocos with apenas como um facilitador para você não ter que ficar digitando o nome da classe toda vez...

Uma dúvida meio noob agora: em Delphi, o with funciona assim como o using do C# também? Ou nesse caso é realmente para você digitar menos?

EmanuelSan's picture

Não trabalhei com Delphi, mas sei (ou sabia) Pascal. Como o Delphi é uma IDE + Object Pascal então é fácil para mim concluir, respondendo sua dúvida, que o with é apenas para economizar na digitação e deixar os programas mais limpos.

Bullshico's picture

É que pascal não tem tratamento de exceções, né? Então é possível que tenham mudado...

Mas eu perguntei mais pela minha ignorância, memso. Eu trabalhava com Delphi e só via o pessoal falando que o with dele era pra isso de economizar código, e eu achava e acho meio inútil... Agora esse with do Python (e o using do C#) faz muito mais sentido!

hamacker's picture

Qualquer linguagem decente faz tratamento de erros. Pascal/Delphi então :
try
F.Close;
except
on e:exception do
begin
Application.MessageBox(Pchar(e.message),'Pau ao fechar o arquivo :', MB_ICONERROR)
bla/bla/bla
end
end

with no pascal serve para referenciar objetos/classes/registros mais complexos dando clareza e não deixando voce referenciar algo que não existe :

type
TCustomer = Record
firstName : string[20];
lastName : string[20];
address1 : string[100];
address2 : string[100];
address3 : string[100];
city : string[20];
postCode : string[8];
end;

var
John, Sarah : TCustomer;

begin
With John do
begin
firstName := 'John';
lastName := 'Smith';
address1 := '7 Park Drive';
address2 := 'Branston';
address3 := 'Grimworth';
city := 'Banmore';
postCode := 'BNM 1AB';
end;

// Set up John's sister similarly - simply copying the whole record
Sarah := John;

// And then changing the first name to suit
Sarah.firstName := 'Sarah';

// Now show the details of both customers
With John do ShowCustomer([firstName, lastName,
address1, address2, address3, city,
postCode]);
With Sarah do ShowCustomer([firstName, lastName,
address1, address2, address3, city,
postCode]);

bla/bla/bla

Nem todos as similaridades dos verbos entre as linguagens servem ao mesmo proposito.

--
Não use o HIMEM.SYS, espere lançarem o SHEERA.SYS

Rocky's picture

Em resumo o try/catch trata condições, por exemplo:

Temos uma variavel que de acordo com o que o usuario fez pode ser 1, 2 ou 3.

try (variavel <> "")
{
catch (variavel == 1)
{
Print "1";
}
catch (variavel == 3)
{
print "2";
}
catch (variavel == 2)
{
print "3";
}
}
else
{
print "Favor selecionar uma opção";
}

ou seja ela serve pra testar varias coisas sem precisar usar 666 if e elses. É muito util quando você precisa verificar por exemplo se tem um periférico como uma impressora conectado na maquina ou se a maquina está conectada na net. Emfim são infinitas as opções.

O básico é que serve pra testar alguma coisa se a condição do try for verdadeira.

PS: Eu usei a linguagem WTF2.56ba para construir a syntax então não reparem.

_____________________

About Me - Muita Pimenta Blogs no ar.

01010010 01101111 01100011 01101011 01111001

DenisKL's picture

Em que linguagem você usa assim?
Sempre usei "Try" para "Tentar" um procedimento e ter controle sobre os erros que podem acontecer.
Ex.:
Try{
conecta com o servidor remoto..
Mensagem("Conectado com sucesso")
}Catch(e){
alerta("Não foi possivel se conectar com o servidor. Verifique se está ligado... bla bla")
}

Claro que em cada liguagem o bloco muda, mas a função dele, em todas as linguagens que usei, foi essa, tentar executar algo e ter o controle sobre algum erro.

Rocky's picture

Usei em VB.NET e C#, mas o try serve pra varias coisa, a função dele é tentar algo, se esse algo retornar true ele vai pra segunda fase e testa as "subs" condições podem retornar um erro como no seu caso ou até executar alguma função.

_____________________

About Me - Muita Pimenta Blogs no ar.

01010010 01101111 01100011 01101011 01111001

sricanesh's picture

Rocky, acho que vc deu uma leve viajada ai...

O try/catch não funciona assim no C#

A sintaxe correta é

try{

}
catch(Exception e){
}

Você pode ter vários blocos catch, onde a diferença será no tratamento diferenciado por tipo de erro, exemplo:

try{
}
catch(System.IO.DriveNotFoundException e){
}
catch(System.IO.DirectoryNotFoundException e){
}
catch{System.Exception e){
}

Ou seja, se ocorrer um erro especificado (drive não encontrado ou diretório não encontrado), os blocos correspondentes serão executados, caso contrário, trata pelo catch genérico (System.Exception)

at

Cassio R Eskelsen

Cobalto's picture

O que seria de mim sem o google ;D
http://diveintopython.org/file_handling/index.html

-----------------------------------------

"Em todo o caso, casai-vos. Se vos couber em sorte uma boa esposa, sereis felizes; se vos calhar uma má, tornar-vos-eis filósofos, o que é excelente para os homens". - Sócrates

meunick's picture

Isso seria como um Switch-case?

sricanesh's picture

+/- sim

Mas os "cases" só podem ser classes que herdam de System.Exception

Cassio R Eskelsen

davidkwast's picture

With permite usar um objeto que precisa ser aberto, usado e fechado, por exemplo. Mas sem precisar conhecer quais o métodos certos e as exceções padrões deste caso específico. É muito usado para aquisição e liberação de Locks, abertura e fechamento de arquivos e aumento da precisão de números decimais. Qualquer classe definida no programa pode ser adaptada para trabalhar com o With se isto fizer sentido, claro. Basta implementar os métodos __enter__ e __exit__.

Exemplo de ler um arquivo:

f = open('file.txt')
print f.readline()
f.close()

com with (fiz no modo interativo):

>>> with open('arquivo') as f:
...    f.readline()
...
'primeira linha\n'
>>> f
<closed file 'arquivo', mode 'r' at 0x5d750>

[]s

garoa's picture
Quote:

>>> with open('arquivo') as f:
... f.readline()
>>> f

Tudo muito legal e Python realmente sempre se esforça para facilitar ao máximo a vida do programador com sintaxe cada vez mais simples. Eu apenas gostaria que Python não sujasse o namespace à toa.

Tipo, esse with e for são claramente apropriadas para uso de variáveis léxicas locais, mas se vc fizer:

for line in open( 'foo.txt' ):
... print line

line, a exemplo de f em seu exemplo, continua existindo após a execução, mesmo sendo completamente irrelevante e possivelmente sobrescrevendo uma com o mesmo nome. Se alguém quisesse que continuasse existindo, simplesmente escreveria:

line = ''
for line in open( 'foo.txt' ):
... print line

ou, no seu exemplo:
f = open('arquivo')
f.readline()

Embora não haja muito uso para o primeiro caso...

sricanesh's picture

Valeu David! Então entendi corretamente e realmente é equivalente ao que o "using" faz no C# Laughing out loud

Cassio R Eskelsen

Storm's picture

Estou pensando em começar a estudar python, um amigo meu é apaixonado nessa linguagem...

nau java is deadi *.*

DenisKL's picture

o "With" semelhante ao "Try" Puzzled
Em linguagens como javascript, Pascal e .Net eles possuem funções beeeem distintas.
Mas também conheço absolutamente nada de Python. Pode ser que nela, os procedimentos sejam semelhantes.

Bullshico's picture

Dá uma olhada na explicação do srinesh (ou seja lá como se escreve op nick dele): http://meiobit.com/node/19677#comment-210674

cafuin's picture

Python é tão absurdamente simples de programar que eu, que tenho muito mais experiência com Java, consigo fazer tarefas de edição de arquivos, micro-nano-parsers mais rápido em python só dando uma consultada na documentação.

Ok, é um exemplo bem forçado, porque essa parte de manipulação de texto, dicionários, etc são alguns dos fortes do Python.

Mas que impressiona, impressiona Smiling .

manuelB's picture

Uma coisa que as pessoas acham é que só da linguagem ter try catch ela já gerencia erro melhor e usam sempre try cach mesmo que de forma equivocada piorando o tratamento de erro. Muito Cuidado! Try catch só é bom se bem usado.
Aconteceu comigo o seguinte, um tempo atrás eu tava testando uns negócio de directx9. executei um demo e c#, o negócio travou, pesou, carregou, após muita demora e muito pesquisar sei lá aonde me mostrou a mensagem de erro não determinado ou qualquer outra mensagem genérica que não me disse nada.
Procurei e não achei o problema. Mas exatamente o mesmo programa tinha também no velho c. Executei e imediatamente apareceu a mensagem "dll nãoseiqual não econtrada" ou coisa do tipo. Beleza, vi que a dll não tava no lugar certo e corrigi.
Isso foi muito irônico, a liguagem que teoricamente trataria melhor os erros não me disse nada relevante, porém a antiga que teoricamente não trata bem erro, disse exatamento o que eu precisava.
Claro que o prog em C# podia ter sido feito usando de forma mais correta o try, mas se o susário não tratou, porque o framework não deixou o erro estourar em algum lugar que me dissesse algo relevante? adianta se meter no meio tra pegar o erro me dizer "erro desconhecido"?
Isso é irônico e emblemático, nem sempre o mais moderno fica melhor se não é bem programado. Nesse caso acho que a culpa foi da implementação meia boca do managed directx da época, hoje deve estar melhor.
Antes que comece um flamewar, isso foi só um caso, eu gosto muito de C# e recomendo o bom uso de try..cacth.

_____________________________________
Dodge this!

sricanesh's picture

Mas o objetivo do try catch é justamente pegar o erro antes que ele estoure na cara do usuário e OPCIONALMENTE dar ao programador a possibilidade de tratar o erro. Ou seja, em primeiro lugar o usuário, depois o programador.

No teu caso específico você estava lidando com um código não-gerenciado, o que complica as coisas.

As vezes, os programadores simplesmente "catcham" o erro, não enviando a informação para cima. Aí não tem trace que resolva. O certo, dependendo do caso, é enviar o erro para cima, com o uso do statement "throw" (assim mesmo, só ele).

Cassio R Eskelsen

manuelB's picture

Eu sei, é exatamente por isso que eu disse que catch tem que ser bem usado. Nesse caso a informação seria útil pra qualquer usuário do programa, não só para o programador. O catch deve ser usado pra informar o susário, não só mascarar o erro. Infelizmente nem sempre ele é bem usado. É comum ver programador usar o mantra "sempre usar try catch" e aí faz o que você dise no final, pegar tudo de qualquer forma sem dar trow pra camada de cima quando conveniente, ou sem prestar informação suficiente sobre o que aconteceu usando os irritantes "erros genéricos".
_____________________________________
Dodge this!

davidkwast's picture

Parabéns pelo artigo, e parabéns por falar sobre Python. É raro ouvir sobre Python em alguns nichos aqui no Brasil.

[]s

Entrar



Design Wenetus