Summary: In this tutorial, you’ll learn how to use the Dart throw statement to raise an exception.
Introduction to the Dart throw statement #
The throw statement raises an exception in the program. The syntax of throw is:
throw e;Code language: Dart (dart)where e is an instance of a class that implements the Exception interface.
For example, the following getCharAt() function uses the throw statement to raise an exception if the index is out of range:
String getCharAt(String s, int index) {
if (index < 0 || index > s.length) {
throw Exception('Index is out of range');
}
return s[index];
}
void main() {
String message = 'Hello';
String s = getCharAt(message, 10);
print(s);
}Code language: Dart (dart)Output:
Unhandled exception:
Exception: Index is out of rangeCode language: Dart (dart)In this example, the getCharAt() function returns the character in a string at an index. If the index is less than 0 or greater than the string’s length, it’ll raise an exception.
To handle the exception, you use the try-catch statement. For example:
String getCharAt(String s, int index) {
if (index < 0 || index > s.length) {
throw Exception('Index is out of range');
}
return s[index];
}
void main() {
String message = 'Hello';
try {
String s = getCharAt(message, 10);
print(s);
} catch (e) {
print(e);
}
}Code language: Dart (dart)In practice, you should not throw an exception that is an instance of the Exception class. Instead, you should define a custom exception class that implements the Exception interface. For example:
class IndexOutOfRangeException implements Exception {
String error;
IndexOutOfRangeException(this.error);
@override
String toString() => error;
}
String getCharAt(String s, int index) {
if (index < 0 || index > s.length) {
throw IndexOutOfRangeException('Index is out of range [0..${s.length}]');
}
return s[index];
}
void main() {
String message = 'Hello';
try {
String s = getCharAt(message, 10);
print(s);
} on IndexOutOfRangeException catch (e) {
print(e);
}
}Code language: Dart (dart)Output:
Index is out of range [0..5]Code language: Dart (dart)How it works.
First, define an IndexOutOfRangeException class that implements the Exception interface:
class IndexOutOfRangeException implements Exception {
String error;
IndexOutOfRangeException(this.error);
@override
String toString() => error;
}Code language: Dart (dart)Second, raise IndexOutOfRangeException in the getCharAt() function:
String getCharAt(String s, int index) {
if (index < 0 || index > s.length) {
throw IndexOutOfRangeException('Index is out of range [0..${s.length}]');
}
return s[index];
}Code language: Dart (dart)Third, handle the exception in the main() function:
void main() {
String message = 'Hello';
try {
String s = getCharAt(message, 10);
print(s);
} on IndexOutOfRangeException catch (e) {
print(e);
}
}Code language: Dart (dart)Dart rethrow #
Sometimes, you want to log the exception and rethrow it. To do that, you use the rethrow statement. For example:
class IndexOutOfRangeException implements Exception {
String error;
IndexOutOfRangeException(this.error);
@override
String toString() => error;
}
String getCharAt(String s, int index) {
if (index < 0 || index > s.length) {
throw IndexOutOfRangeException('Index is out of range [0..${s.length}]');
}
return s[index];
}
void main() {
String message = 'Hello';
try {
String s = getCharAt(message, 10);
print(s);
} on IndexOutOfRangeException catch (e) {
// log to the console
print(e);
rethrow;
}
}Code language: Dart (dart)In this example, we log the error message to the screen and rethrow the same exception.
Summary #
- Use the Dart
throwstatement to raise an exception. - Use the
rethrowstatement to raise the same exception.