You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: capitulos/cap18.adoc
+15-7Lines changed: 15 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1069,18 +1069,26 @@ Aqui estão as regras:
1069
1069
1070
1070
`while`:: O bloco `else` será executado apenas se e quando o loop `while` terminar pela condição se tornar _falsa_ (novamente, não rodará se o `while` for interrompido por um `break`)
1071
1071
1072
-
`try`:: O bloco `else`` será executado apenas se nenhuma exceção for gerada no bloco `try`. A https://docs.python.org/pt-br/3/reference/compound_stmts.html[documentação oficial] também afirma: "Exceções na cláusula `else` não são tratadas pela cláusula `except` precedente."
1072
+
`try`:: O bloco `else` será executado apenas se nenhuma exceção for gerada no bloco `try`. A https://docs.python.org/pt-br/3/reference/compound_stmts.html[documentação oficial] também afirma: "Exceções na cláusula `else` não são tratadas pela cláusula `except` precedente."
1073
1073
1074
1074
Em todos os casos, a cláusula `else` também será ignorada se uma exceção ou uma instrução `return`, `break` ou `continue` fizer com que o fluxo de controle saia do bloco principal da instrução composta.
1075
+
No caso do `try`, esta é a diferença importante entre `else` e `finally`:
1076
+
o bloco `finally` será executado sempre, ocorrendo ou não uma exceção,
1077
+
e até mesmo se o fluxo de execução sair do bloco `try` por uma instrução como `return`.
1075
1078
1076
1079
[NOTE]
1077
1080
====
1078
-
Acho `else` uma escolha muito pobre de palavra reservada em todos os casos, exceto o `if`.
1079
-
Ela implica em uma alternativa excludente, como em "Execute esse loop, caso contrário faça aquilo."
1080
-
Mas a semântica para o `else` em loops é o oposto: "Execute esse loop, daí faça aquilo."
1081
-
Isso sugere `then` como uma escolha melhor—que também faria sentido no contexto de um `try`:
1081
+
Não tenho nada contra o funcionamento dessas cláusulas `else`,
1082
+
mas do ponto de vista do design da linguagem,
1083
+
a palavra `else` foi uma escolha infeliz;
1084
+
`else` implica em uma alternativa excludente,
1085
+
como em "Execute esse loop, caso contrário faça aquilo."
1086
+
Mas a semântica do `else` em loops é o oposto: "Execute esse loop, então faça aquilo."
1087
+
Isso sugere que `then` ("então") seria uma escolha melhor.
1088
+
Também faria sentido no contexto de um `try`:
1082
1089
"Tente isso, então faça aquilo."
1083
-
Entretanto, acrescentar uma palavra reservada é uma ruptura séria em uma linguagem—uma decisão muito difícil.
1090
+
Entretanto, acrescentar uma nova palavra reservada é uma ruptura séria em uma linguagem—uma decisão muito difícil.
1091
+
Guido sempre foi econômico com palavras reservadas.
1084
1092
====
1085
1093
1086
1094
Usar `else` com essas instruções muitas vezes torna o código mais fácil de ler e evita o transtorno de configurar flags de controle ou acrescentar instruções `if` extras ao código.
@@ -1165,7 +1173,7 @@ No fim, _lys.py_ se tornou um instrumento para explorarmos muito mais que _patte
1165
1173
[[further_reading_context_sec]]
1166
1174
=== Para saber mais
1167
1175
1168
-
O https://docs.python.org/pt-br/3/reference/compound_stmts.html[Capítulo 8, "Instruções Compostas,"] em((("with, match, and else blocks", "further reading on"))) _A Referência da Linguagem Python_ diz praticamente tudo que há para dizer sobre cláusulas `else` em instruções `if`, `for`, `while` e `try`. Sobre o uso pythônico de `try/except`, como ou sem `else`, Raymond Hettinger deu uma resposta brilhante para a pergunta https://fpy.li/18-31["Is it a good practice to use try-except-else in Python?" (_É uma boa prática usar try-except-else em Python?_)] (EN) no StackOverflow. O pass:[<a class="orm:hideurl" href="https://fpy.li/pynut3"><em>Python in a Nutshell</em></a>], 3rd ed., by Martelli et al., tem um capítulo sobre exceções com uma excelente discussão sobre o estilo EAFP, atribuindo à pioneira da computação Grace Hopper a criação da frase "É mais fácil pedir perdão que pedir permissão."
1176
+
O https://docs.python.org/pt-br/3/reference/compound_stmts.html[Capítulo 8, "Instruções Compostas,"] em((("with, match, and else blocks", "further reading on"))) _A Referência da Linguagem Python_ diz praticamente tudo que há para dizer sobre cláusulas `else` em instruções `if`, `for`, `while` e `try`. Sobre o uso pythônico de `try/except`, com ou sem `else`, Raymond Hettinger deu uma resposta brilhante para a pergunta https://fpy.li/18-31["Is it a good practice to use try-except-else in Python?" (_É uma boa prática usar try-except-else em Python?_)] (EN) no StackOverflow. O pass:[<a class="orm:hideurl" href="https://fpy.li/pynut3"><em>Python in a Nutshell</em></a>], 3rd ed., by Martelli et al., tem um capítulo sobre exceções com uma excelente discussão sobre o estilo EAFP, atribuindo à pioneira da computação Grace Hopper a criação da frase "É mais fácil pedir perdão que pedir permissão."
1169
1177
1170
1178
1171
1179
O capítulo 4 de _A Biblioteca Padrão do Python_, "Tipos Embutidos", tem uma seção dedicada a https://docs.python.org/pt-br/3/library/stdtypes.html#typecontextmanager["Tipos de Gerenciador de Contexto"]. Os métodos especiais `+__enter__/__exit__+` também estão documentados em _A Referência da Linguagem Python_, em https://docs.python.org/pt-br/3/reference/datamodel.html#with-statement-context-managers["Gerenciadores de Contexto da Instrução with"].footnote:[NT:No momento em que essa tradução é feita, o título dessa seção na documentação diz "Com gerenciadores de contexto de instruções", uma frase que sequer faz sentido. Foi aberto um issue sobre isso.] Os gerenciadores de contexto foram introduzidos na https://fpy.li/pep343[PEP 343—The "with" Statement] (EN).
0 commit comments