diff --git a/lldb/examples/python/stacks.py b/lldb/examples/python/stacks.py
index 06907e1..fec8799 100755
--- a/lldb/examples/python/stacks.py
+++ b/lldb/examples/python/stacks.py
@@ -5,20 +5,28 @@
 import optparse
 import shlex
 
+
 def stack_frames(debugger, command, result, dict):
     command_args = shlex.split(command)
     usage = "usage: %prog [options] <PATH> [PATH ...]"
-    description='''This command will enumerate all stack frames, print the stack size for each, and print an aggregation of which functions have the largest stack frame sizes at the end.'''
-    parser = optparse.OptionParser(description=description, prog='ls',usage=usage)
-    parser.add_option('-v', '--verbose', action='store_true', dest='verbose', help='display verbose debug info', default=False)
+    description = '''This command will enumerate all stack frames, print the stack size for each, and print an aggregation of which functions have the largest stack frame sizes at the end.'''
+    parser = optparse.OptionParser(
+        description=description, prog='ls', usage=usage)
+    parser.add_option(
+        '-v',
+        '--verbose',
+        action='store_true',
+        dest='verbose',
+        help='display verbose debug info',
+        default=False)
     try:
         (options, args) = parser.parse_args(command_args)
     except:
         return
-    
+
     target = debugger.GetSelectedTarget()
     process = target.GetProcess()
-    
+
     frame_info = {}
     for thread in process:
         last_frame = None
@@ -28,12 +36,13 @@
                 frame_size = 0
                 if frame.idx == 1:
                     if frame.fp == last_frame.fp:
-                        # No frame one the first frame (might be right at the entry point)
+                        # No frame one the first frame (might be right at the
+                        # entry point)
                         first_frame_size = 0
                         frame_size = frame.fp - frame.sp
                     else:
                         # First frame that has a valid size
-                        first_frame_size = last_frame.fp - last_frame.sp 
+                        first_frame_size = last_frame.fp - last_frame.sp
                     print "<%#7x> %s" % (first_frame_size, last_frame)
                     if first_frame_size:
                         name = last_frame.name
@@ -43,7 +52,7 @@
                             frame_info[name] += first_frame_size
                 else:
                     # Second or higher frame
-                    frame_size = frame.fp - last_frame.fp 
+                    frame_size = frame.fp - last_frame.fp
                 print "<%#7x> %s" % (frame_size, frame)
                 if frame_size > 0:
                     name = frame.name
@@ -53,7 +62,8 @@
                         frame_info[name] += frame_size
             last_frame = frame
     print frame_info
-    
 
-lldb.debugger.HandleCommand("command script add -f stacks.stack_frames stack_frames")
-print "A new command called 'stack_frames' was added, type 'stack_frames --help' for more information."
\ No newline at end of file
+
+lldb.debugger.HandleCommand(
+    "command script add -f stacks.stack_frames stack_frames")
+print "A new command called 'stack_frames' was added, type 'stack_frames --help' for more information."
