System exceptions
Globally accessible exceptions are stored in the pool dictionary named SystemExceptions. By convention, the names of the exceptions in this pool begin with 'Ex.' SystemExceptions is a pool dictionary belonging to Object and is therefore accessible by all subclasses of Object. 
The following table lists system exceptions in the SystemExceptions pool dictionary. 
Table 5. SystemExceptions pool dictionary
|  |  | 
| ExAll  | The most general exception.  | 
| ExError  | The exception signaled by Object>>error:. This exception is signaled with the string passed to error:.  | 
| ExHalt  | The exception signaled by Object>>halt. This exception is signaled with the string passed to halt:. Note that Object>>halt sends halt:.  | 
| ExUserBreak  | The exception signaled by the system default break handler.  | 
The system exceptions ExError, ExHalt, and ExUserBreak use the first argument for the error string when opening a debugger. If you create a child of these exceptions, you must follow the same convention. Alternatively, you can provide a defaultHandler in the child, which sends error: with an appropriate error message. The defaultHandler for the system exceptions uses the description of the exception as the error string if the first argument is not a string. If you are using exceptions to return non-string values in the arguments of the signal (a reasonable use) then you should provide a default handler for your exceptions that knows that the arguments will not be strings. For example: 
| anErrorException |
(anErrorException := ExError newChild)
    description: 'a demonstration error occurred';
    defaultHandler: [:sig |
               self error: 'My error occurred with arguments: ',
                           sig arguments printString].
 
anErrorException signalWith: 1 with: 2.
 
Last modified date: 05/12/2020