diff --git a/Lib/pdb.py b/Lib/pdb.py
index c9c66c5..23bc6df 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -158,10 +158,14 @@
             self.interaction(frame, None)
 
     def bp_commands(self,frame):
-        """ Call every command that was set for the current active breakpoint (if there is one)
-        Returns True if the normal interaction function must be called, False otherwise """
-        #self.currentbp is set in bdb.py in bdb.break_here if a breakpoint was hit
-        if getattr(self,"currentbp",False) and self.currentbp in self.commands:
+        """Call every command that was set for the current active breakpoint
+        (if there is one).
+
+        Returns True if the normal interaction function must be called,
+        False otherwise."""
+        # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit
+        if getattr(self, "currentbp", False) and \
+               self.currentbp in self.commands:
             currentbp = self.currentbp
             self.currentbp = 0
             lastcmd_back = self.lastcmd
@@ -287,7 +291,8 @@
             func = getattr(self, 'do_' + cmd)
         except AttributeError:
             func = self.default
-        if func.__name__ in self.commands_resuming : # one of the resuming commands.
+        # one of the resuming commands
+        if func.__name__ in self.commands_resuming:
             self.commands_doprompt[self.commands_bnum] = False
             self.cmdqueue = []
             return 1
@@ -300,15 +305,18 @@
     do_h = cmd.Cmd.do_help
 
     def do_commands(self, arg):
-        """Defines a list of commands associated to a breakpoint
-        Those commands will be executed whenever the breakpoint causes the program to stop execution."""
+        """Defines a list of commands associated to a breakpoint.
+
+        Those commands will be executed whenever the breakpoint causes
+        the program to stop execution."""
         if not arg:
             bnum = len(bdb.Breakpoint.bpbynumber)-1
         else:
             try:
                 bnum = int(arg)
             except:
-                print("Usage : commands [bnum]\n        ...\n        end", file=self.stdout)
+                print("Usage : commands [bnum]\n        ...\n        end",
+                      file=self.stdout)
                 return
         self.commands_bnum = bnum
         self.commands[bnum] = []
@@ -646,8 +654,8 @@
     do_n = do_next
 
     def do_run(self, arg):
-        """Restart program by raising an exception to be caught in the main debugger
-        loop. If arguments were given, set them in sys.argv."""
+        """Restart program by raising an exception to be caught in the main
+        debugger loop.  If arguments were given, set them in sys.argv."""
         if arg:
             import shlex
             argv0 = sys.argv[0:1]
@@ -785,7 +793,8 @@
         breaklist = self.get_file_breaks(filename)
         try:
             for lineno in range(first, last+1):
-                line = linecache.getline(filename, lineno, self.curframe.f_globals)
+                line = linecache.getline(filename, lineno,
+                                         self.curframe.f_globals)
                 if not line:
                     print('[EOF]', file=self.stdout)
                     break
@@ -1279,8 +1288,8 @@
 
     # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
     # modified by the script being debugged. It's a bad idea when it was
-    # changed by the user from the command line. There is a "restart" command which
-    # allows explicit specification of command line arguments.
+    # changed by the user from the command line. There is a "restart" command
+    # which allows explicit specification of command line arguments.
     pdb = Pdb()
     while 1:
         try:
@@ -1301,7 +1310,8 @@
             print("Running 'cont' or 'step' will restart the program")
             t = sys.exc_info()[2]
             pdb.interaction(None, t)
-            print("Post mortem debugger finished. The "+mainpyfile+" will be restarted")
+            print("Post mortem debugger finished. The " + mainpyfile +
+                  " will be restarted")
 
 
 # When invoked as main program, invoke the debugger on a script
