Tratamento 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
1234567try { // 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
1234567891011121314151617using 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); } } }
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
123456789101112131415161718using 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
1234567891011121314151617using 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
123456789101112131415161718192021using 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
12345678910111213141516171819202122232425using 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#?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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
Tratamento 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
1234567try { // 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
1234567891011121314151617using 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); } } }
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
123456789101112131415161718using 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
1234567891011121314151617using 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
123456789101112131415161718192021using 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
12345678910111213141516171819202122232425using 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#?
Obrigado pelo seu feedback!