'''Exception chaining''', or '''exception wrapping''', is an [[object-oriented programming]] technique of wrappinghandling [[exception handling|exceptions]] inby newre-throwing exceptionsa bycatched savingexception theafter wrapping it inside a new exception. The original exception is saved as a property (such as ''cause'') of the new exception. The idea is that a method should throw exceptions defined at the same abstraction level as the method itself, but without discarding importantinformation debuggingfrom informationthe lower levels. For example, a method to play a movie file might handle exceptions in reading the file by re-throwing them inside an exception of movie playing. The user interface might display the time the error occured extracted from the movie playing exception (<code>movieplayingexception.time</code>) and the name of the file extracted from the file reading exception (<code>movieplayingexception.cause.filename</code>).
Throwing the right kind of exceptions is particularily enforced by [[exception handling#Checked exceptions|checked exceptions]] in the [[Java programming language]], and starting with language version 1.4 all exceptions support chaining.