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 range
Code 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
throw
statement to raise an exception. - Use the
rethrow
statement to raise the same exception.