{
 "metadata": {
  "name": "Chapter 18"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Chapter 18: Debugging Programs"
     ]
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Program 18.1, Page number: 389"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "import logging\n",
      "\n",
      "def process(i,j,k):\n",
      "        return i+j+k\n",
      "\n",
      "def main():\n",
      "\n",
      "        logger = logging.getLogger()\n",
      "        logger.setLevel(logging.DEBUG)\n",
      "\n",
      "        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')\n",
      "\n",
      "        fh = logging.FileHandler('18.1_logFile.txt')\n",
      "        fh.setLevel(logging.DEBUG)\n",
      "        fh.setFormatter(formatter)\n",
      "        logger.addHandler(fh)\n",
      "\n",
      "        ch = logging.StreamHandler()\n",
      "        ch.setLevel(logging.DEBUG)\n",
      "        ch.setFormatter(formatter)\n",
      "        logger.addHandler(ch)\n",
      "\n",
      "        arr=[]\n",
      "        arr=map(int,\"1 2 3\".split())\n",
      "        #arr=map(int,raw_input().split())\n",
      "        logger.debug(\"Number of integers read= {0}\".format(len(arr)))               #Debug statement\n",
      "        logger.debug(\"i = {0}, j = {1}, k = {2}\\n\".format(arr[0],arr[1],arr[2]))    #Debug statement\n",
      "\n",
      "        print(\"sum= %i\\n\"%process(arr[0],arr[1],arr[2]))\n",
      "\n",
      "\n",
      "if __name__=='__main__':\n",
      "        main()\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 01:20:39,300 - DEBUG - Number of integers read= 3\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 01:20:39,303 - DEBUG - i = 1, j = 2, k = 3\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "sum= 6\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Program 18.2, Page number: 391"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "import logging,sys\n",
      "\n",
      "def process(i1,i2):\n",
      "\n",
      "        global logger \n",
      "        logger.debug(\"process (%i, %i)\\n\"%(i1, i2))\n",
      "        val=i1*i2\n",
      "        logger.debug(\"return %i\\n\"%(val))\n",
      "        return val\n",
      "\n",
      "\n",
      "def main():\n",
      "\n",
      "        global logger\n",
      "        logging.basicConfig(filename='18.2_logFile.txt', filemode='w', level=logging.DEBUG)\n",
      "        logger = logging.getLogger()\n",
      "        logger.setLevel(logging.DEBUG)\n",
      "        filemode = 'w'\n",
      "        \n",
      "        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')\n",
      "\n",
      "        fh = logging.FileHandler('18.2_logFile.txt')\n",
      "        fh.setLevel(logging.DEBUG)\n",
      "        fh.setFormatter(formatter)\n",
      "        logger.addHandler(fh)\n",
      "\n",
      "        ch = logging.StreamHandler()\n",
      "        ch.setLevel(logging.DEBUG)\n",
      "        ch.setFormatter(formatter)\n",
      "        logger.addHandler(ch)\n",
      "\n",
      "\n",
      "        arg1=0\n",
      "        arg2=0\n",
      "        #Un-Comment this while executing from terminal/command line\n",
      "        #if(len(sys.argv)>1):\n",
      "                #arg1=int(sys.argv[1])\n",
      "        #if(len(sys.argv)==3):\n",
      "                #arg2=int(sys.argv[2])\n",
      "\n",
      "        #Dummy command-line-parameters\n",
      "        #execute as \"python <filename>.py arg1 arg2\" while executing from terminal and un/comment respective statements\n",
      "        a=['3','5']                                      \n",
      "        logger.debug(\"processed %i arguments\\n\"%(len(a)))\n",
      "        #logger.debug(\"processed %i arguments\\n\"%(len(sys.argv)))\n",
      "\n",
      "        logger.debug(\"arg1 = %i, arg2 = %i\\n\"%(int(a[0]), int(a[1])))\n",
      "        print(\"product = %i\\n\" %( process (int(a[0]),int( a[1]))))\n",
      "\n",
      "        #logger.debug(\"arg1 = %i, arg2 = %i\\n\"%(arg1, arg2))\n",
      "        #print(\"product = %i\\n\" %( process (arg1, arg2)))\n",
      "\n",
      "\n",
      "if __name__=='__main__':\n",
      "        main()\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 17:50:53,392 - DEBUG - processed 2 arguments\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 17:50:53,397 - DEBUG - arg1 = 3, arg2 = 5\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 17:50:53,404 - DEBUG - process (3, 5)\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 17:50:53,409 - DEBUG - return 15\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "product = 15\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Program 18.3, Page number: 393"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "\n",
      "\n",
      "import logging,sys\n",
      "\n",
      "def process(i1,i2):\n",
      "\n",
      "        global logger \n",
      "        logger.warning(\"process (%i, %i)\\n\"%(i1, i2))\n",
      "        val=i1*i2\n",
      "        logger.error(\"return %i\\n\"%(val))\n",
      "        return val\n",
      "\n",
      "\n",
      "def main():\n",
      "\n",
      "        global logger\n",
      "        logging.basicConfig(filename='18.3_logFile.txt', filemode='w', level=logging.DEBUG)\n",
      "        logger = logging.getLogger()\n",
      "        logger.setLevel(logging.DEBUG)\n",
      "\n",
      "        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')\n",
      "\n",
      "        fh = logging.FileHandler('18.3_logFile.txt')\n",
      "        fh.setLevel(logging.DEBUG)\n",
      "        fh.setFormatter(formatter)\n",
      "        logger.addHandler(fh)\n",
      "\n",
      "        ch = logging.StreamHandler()\n",
      "        ch.setLevel(logging.DEBUG)\n",
      "        ch.setFormatter(formatter)\n",
      "        logger.addHandler(ch)\n",
      "\n",
      "\n",
      "        arg1=0\n",
      "        arg2=0\n",
      "        #Un-Comment this while executing from terminal/command line\n",
      "\n",
      "        #if(len(sys.argv)>1):\n",
      "                #arg1=int(sys.argv[1])\n",
      "        #if(len(sys.argv)==3):\n",
      "                #arg2=int(sys.argv[2])\n",
      "\n",
      "        #Dummy command-line-parameters\n",
      "        #execute as \"python <filename>.py arg1 arg2\" while executing from terminal and un/comment respective statements\n",
      "        a=['3','5']\n",
      "        logger.debug(\"processed %i arguments\\n\"%(len(a)))\n",
      "        #logger.debug(\"processed %i arguments\\n\"%(len(sys.argv)))\n",
      "\n",
      "        logger.info(\"arg1 = %i, arg2 = %i\\n\"%(int(a[0]), int(a[1])))\n",
      "        print(\"product = %i\\n\" %( process (int(a[0]),int( a[1]))))\n",
      "\n",
      "        #logger.debug(\"arg1 = %i, arg2 = %i\\n\"%(arg1, arg2))\n",
      "        #print(\"product = %i\\n\" %( process (arg1, arg2)))\n",
      "\n",
      "\n",
      "if __name__=='__main__':\n",
      "        main()\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 17:54:41,136 - DEBUG - processed 2 arguments\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 17:54:41,142 - INFO - arg1 = 3, arg2 = 5\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 17:54:41,149 - WARNING - process (3, 5)\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "2013-08-27 17:54:41,154 - ERROR - return 15\n",
        "\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "product = 15\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Program 18.4, Page number: 396"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "def main():\n",
      "        \n",
      "        #Variable Declaration\n",
      "        sum=0\n",
      "        data = [1, 2, 3, 4, 5]\n",
      "\n",
      "        #Calculation\n",
      "        for i in range (0,5):\n",
      "                sum += data[i]\n",
      "        \n",
      "        #Result\n",
      "        print(\"sum = %i\\n\"%(sum))\n",
      "        \n",
      "\n",
      "if __name__=='__main__':\n",
      "        main()\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "sum = 15\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Program 18.5, Page number: 401"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "class date:\n",
      "        def __init__(self,m,d,y):               #Class constructor\n",
      "                self.month=m\n",
      "                self.day=d\n",
      "                self.year=y\n",
      "\n",
      "        def foo(x):\n",
      "                x.day+=1\n",
      "                return x\n",
      "\n",
      "def main():\n",
      "\n",
      "        #Variable Declaration\n",
      "        today=date(10,11,2004)\n",
      "        array=[1,2,3,4,5]\n",
      "        string=\"test string\"\n",
      "        i=3\n",
      "        newdate=date(11,15,2004)\n",
      "        today=date.foo(today)\n",
      "\n",
      "        #Result\n",
      "        print(\"today= %d/%d/%d\"%(today.day,today.month,today.year))\n",
      "\n",
      "\n",
      "if __name__=='__main__':\n",
      "        main()\n",
      "\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "today= 12/10/2004\n"
       ]
      }
     ],
     "prompt_number": 5
    }
   ],
   "metadata": {}
  }
 ]
}