do:
言語機能としては例外処理構文が存在しないが別途例外処理を備える言語も存在する。Smalltalkは言語機能として制御構文が殆どない。このため例外処理構文もブロックを組み合わせたメッセージ式として記述するようになっている。言語機能ではないため極めて柔軟性がありブロックの戻り値を変更したり例外が発生した式の途中から復帰したりなど様々な制御が可能になっている。
制御フローへの転用.
例外処理の過程では処理の流れが通常の制御とは大きく変化することとなるが、これを（エラー処理以外の目的で、正常系において）積極的に利用することは、アンチパターンとされることもある。
通知例外にはエラー例外と異なる特徴的な点がある。通知を投げた場合は、エラーと異なり補足しなければ処理を中止せずそのまま続行となる。
戻り値と例外.
このような戻り値による処理の成否判定には下記のような問題点がある。
 try
 catch
言語レベルでの例外処理はこれらの欠点を解消し、例外を確実に、かつ統一的に処理する目的で導入されたものと言える。
回復処理.
記憶領域の枯渇.
処理中に使用可能な記憶領域が枯渇した場合の回復は比較的単純である。
次にSmalltalkによる回復処理の例を示す:
open
 to:
 [
 ]
 記憶領域が枯渇した場合の回復処理。
 処理を中断した上、できるだけ資源を解放したのち使用者に記憶領域の解放を促す。
 例外が発生してから例外を捕捉するまでに幾分かの記憶領域が解放される、
 解放後ゆとりができていれば回復できるが、ゆとりが無い場合は回復できなくなる場合もある。
 do:
 ].
 openInWorld.
例外のネスト.
ある例外を処理中に、元のものとは別の例外が発生する場合がある。これを例外のネスト（入れ子）と呼ぶ。例外のネストの処理は例外処理の設計や実装を複雑にするため、どの範囲までネストを許すかやどのような処理に対しては例外を許さないかがしばしば問題となる。
言語仕様として実装されている例外にあっては、ネストのレベルは一般には制限されていない。この場合、同じ例外が繰り返し発生することにより無限ループに陥る恐れがある。そのような状況への対策は設計者や実装者の責任となる。