Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Tratamento de Erros | Estruturas de Dados e Manipulação de Arquivos
C# Além do Básico

bookTratamento de Erros

Você pode ter encontrado o termo erro de tempo de execução em capítulos anteriores. Um erro de tempo de execução é um erro que ocorre enquanto o programa está em execução – daí o nome "erro de tempo de execução".

Normalmente, quando ocorre um erro de tempo de execução, o programa trava ou para de responder.

O compilador pode ajudar apontando a maioria dos erros em nosso código, mas erros de tempo de execução são, em sua maioria, imprevisíveis e geralmente dependem de parâmetros incertos.

Por exemplo, caso o caminho do arquivo passado para StreamReader seja inválido ou não exista, ocorrerá um erro de tempo de execução e o programa irá travar. Portanto, frequentemente colocamos esse tipo de código perigoso em blocos try-catch para tentar executar algum código e, caso ele falhe, capturamos e tratamos o erro ao invés de causar a falha do programa.

A seguir está a sintaxe do bloco try-catch:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Aqui, Exception é uma palavra-chave que representa o tipo de dado Exception.

Exemplo

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Note
Nota

Podemos omitir a parte (Exception error) da instrução catch se não estivermos utilizando error.

A seguir estão alguns casos comuns em que um erro de tempo de execução pode ocorrer:

Divisão por zero

index.cs

index.cs

copy
123456789101112131415161718
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }

Índice Inválido de um Array ou Lista

index.cs

index.cs

copy
1234567891011121314151617
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }

Chave Não Encontrada (para Dicionários):

index.cs

index.cs

copy
123456789101112131415161718192021
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }

O Bloco finally

Existe também um bloco de código opcional chamado finally, que é executado após o bloco catch ser executado. O bloco finally sempre será executado após os blocos try e catch, independentemente de uma exceção ter sido lançada ou não. Isso garante que qualquer código dentro de finally seja executado todas as vezes, tornando-o útil para tarefas como fechar arquivos ou liberar recursos.

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }

1. Qual será a saída do seguinte programa?

2. Em C#, qual é o propósito do bloco finally?

3. Qual das seguintes afirmações é verdadeira em relação ao bloco try-catch em C#?

question mark

Qual será a saída do seguinte programa?

Select the correct answer

question mark

Em C#, qual é o propósito do bloco finally?

Select the correct answer

question mark

Qual das seguintes afirmações é verdadeira em relação ao bloco try-catch em C#?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 9

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

What are some other examples of runtime errors?

Can you explain how the try-catch block works with a code example?

What is the difference between compile-time and runtime errors?

Awesome!

Completion rate improved to 2.04

bookTratamento de Erros

Deslize para mostrar o menu

Você pode ter encontrado o termo erro de tempo de execução em capítulos anteriores. Um erro de tempo de execução é um erro que ocorre enquanto o programa está em execução – daí o nome "erro de tempo de execução".

Normalmente, quando ocorre um erro de tempo de execução, o programa trava ou para de responder.

O compilador pode ajudar apontando a maioria dos erros em nosso código, mas erros de tempo de execução são, em sua maioria, imprevisíveis e geralmente dependem de parâmetros incertos.

Por exemplo, caso o caminho do arquivo passado para StreamReader seja inválido ou não exista, ocorrerá um erro de tempo de execução e o programa irá travar. Portanto, frequentemente colocamos esse tipo de código perigoso em blocos try-catch para tentar executar algum código e, caso ele falhe, capturamos e tratamos o erro ao invés de causar a falha do programa.

A seguir está a sintaxe do bloco try-catch:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Aqui, Exception é uma palavra-chave que representa o tipo de dado Exception.

Exemplo

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Note
Nota

Podemos omitir a parte (Exception error) da instrução catch se não estivermos utilizando error.

A seguir estão alguns casos comuns em que um erro de tempo de execução pode ocorrer:

Divisão por zero

index.cs

index.cs

copy
123456789101112131415161718
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }

Índice Inválido de um Array ou Lista

index.cs

index.cs

copy
1234567891011121314151617
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }

Chave Não Encontrada (para Dicionários):

index.cs

index.cs

copy
123456789101112131415161718192021
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }

O Bloco finally

Existe também um bloco de código opcional chamado finally, que é executado após o bloco catch ser executado. O bloco finally sempre será executado após os blocos try e catch, independentemente de uma exceção ter sido lançada ou não. Isso garante que qualquer código dentro de finally seja executado todas as vezes, tornando-o útil para tarefas como fechar arquivos ou liberar recursos.

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }

1. Qual será a saída do seguinte programa?

2. Em C#, qual é o propósito do bloco finally?

3. Qual das seguintes afirmações é verdadeira em relação ao bloco try-catch em C#?

question mark

Qual será a saída do seguinte programa?

Select the correct answer

question mark

Em C#, qual é o propósito do bloco finally?

Select the correct answer

question mark

Qual das seguintes afirmações é verdadeira em relação ao bloco try-catch em C#?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 9
some-alt