Python - good practice to catch errors
<p>I have these files in my project:</p>

<pre><code>- main.py
- module1.py
- module2.py
</code></pre>

<p><code>main</code> is the main file that will be directly execute in console.<br></p>

<p><code>module1</code> will be imported into <code>main</code> and throws <code>Module1Exception</code>.<br></p>

<p><code>module2</code> will be imported into <code>module1</code>, throws <code>Module2Exception</code> 
and uses lib that throws <code>NormalException</code> and <code>CriticalException</code> exceptions.</p>

<p>On all exceptions application should exit.</p>

<p>Which option is a most effective way to catch those errors?<br>
<strong>a)</strong> All exceptions will be catch in <code>main</code>, print message and exit<br>
<strong>b)</strong> Lets allow modules to catch exceptions (<code>module2</code> catch lib exceptions, <code>module1</code> catch only <code>Module2Exception</code> and <code>main</code> catch <code>Module1Exception</code>), print message and exit.<br>
<strong>c)</strong> Like <em>b</em>, except that modules will not exit, instead returns False and exit will be called in <code>main</code></p>

<p><strong>Edit:</strong></p>

<p>This will be server side application, running as daemon. I expect that in future I will be using multiple servers with global log monitoring, like flume or scribe. Exceptions <strong>must</strong> be caught. These files is only example. In fact, I'm writing a large application which is act as a kind of server. In this moment i write module for load and parse configuration file. In this case script should exit if any exceptions will be raised. And only in this case. After loading the configuration files and pass the tests, the script will be left unattended.</p>
