title: API Gateway + Lambda + Python: Handling Exceptions
body: <p>I'm invoking a Python-based AWS Lambda method from API Gateway in non-proxy mode. How should I properly handle exceptions, so that an appropriate HTTP status code is set along with a JSON body using parts of the exception.</p>
  
  <p>As an example, I have the following handler:</p>
  
  <pre><code>def my_handler(event, context):
      try:
          s3conn.head_object(Bucket='my_bucket', Key='my_filename')
      except botocore.exceptions.ClientError as e:
          if e.response['Error']['Code'] == "404":
              raise ClientException("Key '{}' not found".format(filename))
              # or: return "Key '{}' not found".format(filename) ?
  
  class ClientException(Exception):
      pass
  </code></pre>
  
  <p>Should I throw an exception or return a string? Then how should I configure the Integration Response? Obviously I've RTFM but the FM is FU.</p>