Error Handling
This library never throws exceptions to signal error. In general, the library returns aStatusOr if an error is possible. Some functions return objects that are not wrapped in aStatusOr<T> but will themselves return aStatusOr<T> to signal an error. For example, wrappers for asynchronous operations returnfuture<StatusOr<T>>.
Applications should check if theStatusOr<T> contains a value before using it, much like how you might check that a pointer is not null before dereferencing it. Indeed, aStatusOr<T> object can be used like a smart-pointer toT, with the main difference being that when it does not hold aT it will instead hold aStatus object with extra information about the error.
You can check that aStatusOr<T> contains a value by calling the.ok() method, or by usingoperator bool() (like with other smart pointers). If there is no value, you can access the containedStatus object using the.status() member. If there is a value, you may access it by dereferencing withoperator*() oroperator->(). As with all smart pointers, callers must first check that theStatusOr<T> contains a value before dereferencing and accessing the contained value. Alternatively, callers may instead use the.value() member function which is defined to throw aRuntimeStatusError if there is no value.
.value() on aStatusOr<T> that does not contain a value will terminate the program instead of throwing.Example
namespace spanner = ::google::cloud::spanner; [](spanner::Client client) { auto rows = client.Read("Albums", spanner::KeySet::All(), {"AlbumTitle"}); // The actual type of `row` is google::cloud::StatusOr<spanner::Row>, but // we expect it'll most often be declared with auto like this. for (auto const& row : rows) { // Use `row` like a smart pointer; check it before dereferencing if (!row) { // `row` doesn't contain a value, so `.status()` will contain error info std::cerr << row.status(); break; } // The actual type of `song` is google::cloud::StatusOr<std::string>, but // again we expect it'll be commonly declared with auto as we show here. auto song = row->get<std::string>("AlbumTitle"); // Instead of checking then dereferencing `song` as we did with `row` // above, here we demonstrate use of the `.value()` member, which will // return a reference to the contained `T` if it exists, otherwise it // will throw an exception (or terminate if compiled without exceptions). std::cout << "SongName: " << song.value() << "\n"; } }See Also
See Also
google::cloud::Status the class used to describe errors.
See Also
google::cloud::future for more details on the type returned by asynchronous operations.
Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-12-18 UTC.