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 frequentemente dependem de parâmetros incertos.

Por exemplo, caso o caminho do arquivo passado para o StreamReader seja inválido ou não exista, ocorrerá um erro de tempo de execução e o programa irá travar. Portanto, muitas vezes podemos colocar 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 pode ocorrer um erro em tempo de execução:

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 a execução do bloco catch:

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:

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

What are some best practices for handling runtime errors?

Can you list other common runtime errors besides the ones mentioned?

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 frequentemente dependem de parâmetros incertos.

Por exemplo, caso o caminho do arquivo passado para o StreamReader seja inválido ou não exista, ocorrerá um erro de tempo de execução e o programa irá travar. Portanto, muitas vezes podemos colocar 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 pode ocorrer um erro em tempo de execução:

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 a execução do bloco catch:

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