#### §6.2.(d) Exceptions

The following `Exceptions` can be thrown during the execution of an ObjectTeam/Java program:

`ResultNotProvidedException`
  Thrown if a replace callin without a base call does not provide the necessary (primitive type) base result (see §4.3.(e)).
`LiftingFailedException`
  Thrown if an actual ambiguity occurs during lifting (see §2.3.4.(c)) or if lifting would need to instantiate an abstract role class (see §2.5.(b)). This is a checked exception. See §2.3.5 for more information.
`WrongRoleException`
  Thrown during lifting if the base object has, with respect to the same team instance, previously been lifted to a role type that is not conform to the currently requested type (see §2.3.4.(d) and §2.4.3).
`DuplicateRoleException`
  Thrown during explicit role creation, if a new role is created for a base object, which already has a role of the required type in the given team (see §2.4.1.(c)).
`RoleCastException`
  Thrown during cast of an externalized role, if the casted expression is anchored to a different team instance than the cast type (see §1.2.4.(b)).
`LiftingVetoException`
  This exception is used internally to abort the process of lifting when a relevant guard predicate (§5.4) evaluated to false. Such exceptions thrown from generated code will never appear in client code, so there is usually no need to catch a `LiftingVetoException`. However, in some situations it is useful to explicitly throw a `LiftingVetoException` from a lifting constructor (§2.3.1.(b)) of a role. This style allows to abort lifting even after the lifting constructor has started to work and also for method parameters requiring lifting. If lifting was triggered due to a callin method binding, this binding will simply not trigger if a `LiftingVetoException` is thrown while preparing the call to the role method.