{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"CPSC231-9System.ipynb","provenance":[],"collapsed_sections":["VJz1Rnz6Ds52","BdSPoPRUFfSu","Mk4W1xfxD0rz","Ta_FFGL3JP03"],"authorship_tag":"ABX9TyMnFUG1Tf3xEjkBAJRx9rVD"},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"cell_type":"markdown","metadata":{"id":"VJz1Rnz6Ds52"},"source":["# Topic 9: System: Command Line Arguments"]},{"cell_type":"markdown","metadata":{"id":"BdSPoPRUFfSu"},"source":["##Arguments"]},{"cell_type":"markdown","metadata":{"id":"PicBZAb5D-v7"},"source":["Code is generally run from command line like\n","\n","python program.py\n","\n","When you just double click on a file and run it it runs in the same way\n","\n","When we do this a special storage area stores the information\n","\n","sys.argv = [\"program.py\"]\n","\n","However running from command line lets us add arguments\n","\n","python program.py filename.txt 3.14 \"Hello, World!\"\n","\n","The result of this is \n","\n","sys.argv = [\"program.py\",\"filename.txt\",\"3.14\",\"Hello, world!\"]\n","\n"]},{"cell_type":"markdown","metadata":{"id":"w9ARr8ubElSs"},"source":["One issue we'll have using a notebook here is that we can't actually run a 'program' The whole notebook is a program. For the sake of pretending we have we'll 'hack' the arguments temporarily."]},{"cell_type":"code","metadata":{"id":"26AFQfHPEkv-","colab":{"base_uri":"https://localhost:8080/","height":92},"executionInfo":{"status":"ok","timestamp":1598636370224,"user_tz":360,"elapsed":372,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"0681c3e4-b093-437b-bafc-b71138ab8443"},"source":["import sys\n","\n","print(sys.argv)\n","\n","#Pretend program was run with python myProgram.py 1 string \"string string\"\n","sys.argv = [\"myProgram.py\", \"1\", \"string\", \"string string\"]\n","\n","print(len(sys.argv))\n","print(sys.argv)\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["['/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py', '-f', '/root/.local/share/jupyter/runtime/kernel-67fd6331-d996-4265-b466-b8c03d9d9cc9.json']\n","4\n","['myProgram.py', '1', 'string', 'string string']\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"zcpTkJplFX3c"},"source":["We should always change arguments from string type to the type we expect them to be"]},{"cell_type":"code","metadata":{"id":"VUNwBdXWFWUu","colab":{"base_uri":"https://localhost:8080/","height":108},"executionInfo":{"status":"ok","timestamp":1598636370227,"user_tz":360,"elapsed":372,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"25e10b73-433a-4a71-af37-a689ef74c48c"},"source":["import sys\n","\n","print(sys.argv)\n","\n","#Pretend program was run with python myProgram.py 1 string \"string string\"\n","sys.argv = [\"myProgram.py\", \"1\", \"string\", \"string string\"]\n","\n","print(len(sys.argv))\n","print(sys.argv)\n","\n","print(type(sys.argv[1]))\n","\n","arg1 = int(sys.argv[1])\n","print(type(arg1))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["['myProgram.py', '1', 'string', 'string string']\n","4\n","['myProgram.py', '1', 'string', 'string string']\n","\n","\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"whPR8lDOFhgj"},"source":["##Errors"]},{"cell_type":"markdown","metadata":{"id":"eIQbWbdDFp_7"},"source":["The argument list is like any list so we should make sure to loop correctly through it, or access the last spot correctly."]},{"cell_type":"code","metadata":{"id":"SvwyP0Y3FjTD","colab":{"base_uri":"https://localhost:8080/","height":298},"executionInfo":{"status":"error","timestamp":1598636370487,"user_tz":360,"elapsed":622,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"06e06462-9bf1-48c3-b96d-ad4247369a0d"},"source":["from sys import argv\n","\n","#Pretend program was run with python myProgram.py 1 string \"string string\"\n","argv = [\"myProgram.py\", \"1\", \"string\", \"string string\"]\n","\n","i = 0\n","while i <= len(argv):\n"," print(argv[i])\n"," i+=1"],"execution_count":null,"outputs":[{"output_type":"stream","text":["myProgram.py\n","1\n","string\n","string string\n"],"name":"stdout"},{"output_type":"error","ename":"IndexError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margv\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m+=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mIndexError\u001b[0m: list index out of range"]}]},{"cell_type":"markdown","metadata":{"id":"Ckhq-4v2FvT7"},"source":["A very common step is to check that the number of arguments is correct"]},{"cell_type":"code","metadata":{"id":"sh-yBi66FzAj"},"source":["import sys\n","\n","sys.argv = [\"myProgram.py\", \"1\", \"string\", \"string string\"]\n","\n","if len(sys.argv) != 4:\n"," print('Invalid number of arguments')\n","else:\n"," value1 = sys.argv[1]\n"," print(\"Received\", value1)"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"498KgDFcF8Is"},"source":["##Design"]},{"cell_type":"code","metadata":{"id":"1uSSUOSxF7U0"},"source":["import sys\n","\n","sys.argv = [\"program.py\",\"filename.txt\",\"3.14\",\"Hello, world!\"]\n","\n","EXPECTED_ARG_COUNT = 4\n","\n","def main():\n"," if len(sys.argv) != EXPECTED_ARG_COUNT:\n"," print(\"Error: Expect 4 arguments! and got %d\" % len(sys.argv))\n"," return \n"," #Check if data in arguments is right? Exceptions\n"," #Check if files can be accessed\n"," #Then can move on to read files\n","\n","main()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Mk4W1xfxD0rz"},"source":["# Topic 9: System: Files"]},{"cell_type":"markdown","metadata":{"id":"Ta_FFGL3JP03"},"source":["##Exists\n"]},{"cell_type":"code","metadata":{"id":"G3-A8mYBJRW8"},"source":["import os\n","import sys\n","\n","sys.argv = [\"program.py\",\"filename.txt\",\"3.14\",\"Hello, world!\"]\n","\n","print(\"Exists?\", os.path.exists(sys.argv[1]))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"WTKE_Eg4JekE","colab":{"base_uri":"https://localhost:8080/","height":54},"executionInfo":{"status":"ok","timestamp":1598636449961,"user_tz":360,"elapsed":309,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"b55ef0fb-4e07-4183-ebd6-2ba8c8e3831c"},"source":["import os\n","import sys\n","\n","sys.argv = [\"program.py\",\"filename.txt\",\"3.14\",\"Hello, world!\"]\n","\n","#Remove because notebooks are not great for this\n","if os.path.exists(sys.argv[1]):\n"," os.remove(sys.argv[1])\n","\n","print(\"Exists?\", os.path.exists(sys.argv[1]))\n","\n","#Make file\n","file = open(sys.argv[1], \"w\")\n","file.write(sys.argv[3])\n","file.close()\n","\n","print(\"Exists?\", os.path.exists(sys.argv[1]))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Exists? False\n","Exists? True\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"UzicHAhYKLhN"},"source":["##Open a file"]},{"cell_type":"code","metadata":{"id":"VyfcGSv1KM8c"},"source":["#For read\n","file_handle = open(\"filename.txt\")\n","file_handle.close()\n","file_handle = open(\"filename.txt\", \"r\")\n","file_handle.close()"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"3T_U4WR8KRPd"},"source":["#For write\n","file_handle = open(\"filename.txt\", \"w\")\n","file_handle.close()"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"2Siq88wLKX0c"},"source":["#For append\n","file_handle = open(\"filename.txt\", \"a\")\n","file_handle.close()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"4totFOubKnOF"},"source":["##Writing"]},{"cell_type":"code","metadata":{"id":"7jzlVZWWKojM"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath, \"w\")\n","for i in range(5):\n"," fileHandler.write(str(i)+\"\\n\")\n","fileHandler.close()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ZmMv8dvSKbm0"},"source":["##Reading"]},{"cell_type":"code","metadata":{"id":"gYW1rOYeKcvb","colab":{"base_uri":"https://localhost:8080/","height":108},"executionInfo":{"status":"ok","timestamp":1598636809457,"user_tz":360,"elapsed":311,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"fee53f05-836a-476e-f121-c88b1d18ed45"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath)\n","for line in fileHandler:\n"," print(line.rstrip())\n","fileHandler.close()"],"execution_count":null,"outputs":[{"output_type":"stream","text":["0\n","1\n","2\n","3\n","4\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"yMt2O3vgLFAM","colab":{"base_uri":"https://localhost:8080/","height":126},"executionInfo":{"status":"ok","timestamp":1598636810528,"user_tz":360,"elapsed":289,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"17b93325-bb8f-4b7a-c99e-e70335d4aa68"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath)\n","lines = fileHandler.readlines()\n","fileHandler.close()\n","\n","print(lines)\n","\n","for line in lines:\n"," print(line.rstrip())\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["['0\\n', '1\\n', '2\\n', '3\\n', '4\\n']\n","0\n","1\n","2\n","3\n","4\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"HgkLCxs5LTSE","colab":{"base_uri":"https://localhost:8080/","height":108},"executionInfo":{"status":"ok","timestamp":1598636812922,"user_tz":360,"elapsed":307,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"32626589-82b7-4bae-af29-8410e84a5928"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath)\n","line = fileHandler.readline()\n","while line != \"\":\n"," print(line.rstrip())\n"," line = fileHandler.readline()\n","fileHandler.close()"],"execution_count":null,"outputs":[{"output_type":"stream","text":["0\n","1\n","2\n","3\n","4\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"gdXuu6mYLhRu","colab":{"base_uri":"https://localhost:8080/","height":417},"executionInfo":{"status":"ok","timestamp":1598636960833,"user_tz":360,"elapsed":367,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"6d22298c-30c2-4516-c87c-fc87807467fd"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath)\n","\n","print('Current position: %d' % fileHandler.tell())\n","print('read: <%s>' % fileHandler.read(1)) \n","print('Current position: %d' % fileHandler.tell())\n","print('read: <%s>' % fileHandler.read(1)) \n","\n","print('Current position: %d' % fileHandler.tell())\n","print('read: <%s>' % fileHandler.read(1)) \n","print('Current position: %d' % fileHandler.tell())\n","print('read: <%s>' % fileHandler.read(1)) \n","print('Current position: %d' % fileHandler.tell())\n","\n","print('read: <%s>' % fileHandler.read(2)) \n","print('Current position: %d' % fileHandler.tell())\n","\n","print('read: <%s>' % fileHandler.read(4)) \n","print('Current position: %d' % fileHandler.tell())\n","\n","fileHandler.seek(0)\n","print('read: <%s>' % fileHandler.read(4)) \n","print('Current position: %d' % fileHandler.tell())\n","\n","fileHandler.close()"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Current position: 0\n","read: <0>\n","Current position: 1\n","read: <\n",">\n","Current position: 2\n","read: <1>\n","Current position: 3\n","read: <\n",">\n","Current position: 4\n","read: <2\n",">\n","Current position: 6\n","read: <3\n","4\n",">\n","Current position: 10\n","read: <0\n","1\n",">\n","Current position: 4\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"ASI4jBk2MFpg","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1598637064462,"user_tz":360,"elapsed":380,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"81727ee8-2696-4b0f-cf3b-7b6a99ada1b3"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath, \"w\")\n","fileHandler.write(\"ID NAME\\n01 Jack\\n02 Mack\\n03 Pham\\n...\")\n","fileHandler.close()\n","\n","fileHandler = open(filePath)\n","fileHandler.seek(8*3) #skip the first 3 rows (windows stores 1 character end line, use 9 for unix 2 character end lines)\n","s_id = fileHandler.read(2)\n","fileHandler.read(1) #skip space\n","s_name = fileHandler.read(4)\n","print(\"Student ID: %s, Name: %s.\" % (s_id, s_name))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Student ID: 03, Name: Pham.\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"HegmHcPCK4FM"},"source":["##Appending vs Writing"]},{"cell_type":"code","metadata":{"id":"U1rESZJUK3G-","colab":{"base_uri":"https://localhost:8080/","height":108},"executionInfo":{"status":"ok","timestamp":1598636673829,"user_tz":360,"elapsed":314,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"b0e5697a-0a18-4649-917f-9ddc987cf231"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath, \"w\")\n","for i in range(5):\n"," fileHandler.write(str(i)+\"\\n\")\n","fileHandler.close()\n","\n","fileHandler = open(filePath)\n","for line in fileHandler:\n"," print(line.rstrip())\n","fileHandler.close()\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["0\n","1\n","2\n","3\n","4\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"Lt6usOPWK9Ck","colab":{"base_uri":"https://localhost:8080/","height":108},"executionInfo":{"status":"ok","timestamp":1598636690661,"user_tz":360,"elapsed":323,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"ab8c8342-0bd6-4228-9bb3-8948ff489b7c"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath, \"w\")\n","for i in range(5):\n"," fileHandler.write(str(i)+\"\\n\")\n","fileHandler.close()\n","\n","fileHandler = open(filePath, \"w\")\n","for i in range(5,10):\n"," fileHandler.write(str(i)+\"\\n\")\n","fileHandler.close()\n","\n","fileHandler = open(filePath)\n","for line in fileHandler:\n"," print(line.rstrip())\n","fileHandler.close()\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["5\n","6\n","7\n","8\n","9\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"b5DSxaG5LBTM","colab":{"base_uri":"https://localhost:8080/","height":199},"executionInfo":{"status":"ok","timestamp":1598636696205,"user_tz":360,"elapsed":308,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"807e2627-7150-4519-f33d-7242076dc29d"},"source":["filePath = \"inputFile.txt\"\n","fileHandler = open(filePath, \"w\")\n","for i in range(5):\n"," fileHandler.write(str(i)+\"\\n\")\n","fileHandler.close()\n","\n","fileHandler = open(filePath, \"a\")\n","for i in range(5,10):\n"," fileHandler.write(str(i)+\"\\n\")\n","fileHandler.close()\n","\n","fileHandler = open(filePath)\n","for line in fileHandler:\n"," print(line.rstrip())\n","fileHandler.close()\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["0\n","1\n","2\n","3\n","4\n","5\n","6\n","7\n","8\n","9\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"8YXWmxRaNfgO"},"source":["##Design\n"]},{"cell_type":"code","metadata":{"id":"cYSFOQ5nNgUM","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1598637471135,"user_tz":360,"elapsed":416,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"d6ad0dc4-1843-4ec3-e399-a782b2f99b4e"},"source":["import os\n","import sys\n","\n","sys.argv = [\"program.py\",\"filename.txt\",\"3.14\",\"Hello, world!\"]\n","\n","EXPECTED_ARG_COUNT = 4\n","\n","def main():\n"," if len(sys.argv) != EXPECTED_ARG_COUNT:\n"," sys.stderr.write(\"Error: Expect 4 arguments! and got %d\\n\" % len(sys.argv))\n"," return \n"," #Check if data in arguments is right? Exceptions\n"," #Check if files can be accessed\n"," if not os.path.exists(sys.argv[1]):\n"," sys.stderr.write(\"Error: File does not exist %s\\n\" % sys.argv[1])\n"," return\n"," #Make file\n"," file = open(sys.argv[1], \"w\")\n"," file.write(sys.argv[3])\n"," file.close()\n"," file = open(sys.argv[1], \"r\")\n"," print(file.readlines()[0])\n"," file.close()\n"," \n","main()\n","\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Hello, world!\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"hFdFCictD6ob"},"source":["# Topic 9: System: Exceptions"]},{"cell_type":"markdown","metadata":{"id":"OI895To9OFkN"},"source":["Best design is to always use a function to check something instead of letting it 'blow up'"]},{"cell_type":"code","metadata":{"id":"Z-duY_E9OJUO","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606767052577,"user_tz":420,"elapsed":670,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"65218767-8fa9-4ffa-f1d6-13574814e4d7"},"source":["import os\n","\n","if not os.path.exists(\"NotThere.txt\"):\n"," print(\"File does not exist\")"],"execution_count":2,"outputs":[{"output_type":"stream","text":["File does not exist\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"oYq4Ta1YOJte","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606756051436,"user_tz":420,"elapsed":353,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"0da5020e-107f-4a7f-f3c2-5300b1eaec4f"},"source":["try:\n"," fileHandler = open(\"NotThere.txt\")\n","except:\n"," print(\"Oops! Something went wrong.\")"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Oops! Something went wrong.\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"Jl5htioGOtyt"},"source":["However just because we check doesn't mean an exception can't happen"]},{"cell_type":"code","metadata":{"id":"X6QkAcEHOman","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606767202519,"user_tz":420,"elapsed":565,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"cc59891c-114f-42fa-fd37-3e32543476f0"},"source":["#CREATING A FILE\n","file=open(\"inputFile.txt\",\"w\")\n","file.close()\n","\n","from os import path\n","filePath = \"inputFile.txt\"\n","if path.exists(filePath): #File exists\n"," print(\"File exists\")\n"," ##File disappears between exist check and opening\n"," os.remove(filePath)\n"," try :\n"," fileHandler = open(filePath) \n"," except:\n"," print(\"File does not exist or can't be accessed!\")"],"execution_count":4,"outputs":[{"output_type":"stream","text":["File exists\n","File does not exist!\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"Xr7OH7BoOBAH"},"source":["##Try/Except"]},{"cell_type":"code","metadata":{"id":"-Cg3NsTYPCpk","colab":{"base_uri":"https://localhost:8080/","height":165},"executionInfo":{"status":"error","timestamp":1606767484906,"user_tz":420,"elapsed":417,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"f1e6dcb6-5194-42ea-d7a1-bab50b3627bd"},"source":["try:\n"," int(\"qwerqwe\")\n","except:\n"," print(\"Error parsing integer\")"],"execution_count":11,"outputs":[{"output_type":"error","ename":"ValueError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"qwerqwe\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;31mValueError\u001b[0m: invalid literal for int() with base 10: 'qwerqwe'"]}]},{"cell_type":"code","metadata":{"id":"x-Y6GUXIPhw9","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606767381105,"user_tz":420,"elapsed":376,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"b264a7ec-040f-4897-9473-d0bee36b6949"},"source":["print(\"Always Before\")\n","\n","try:\n"," print(\"Always unless this is the line that blows up\")\n"," int(\"hello\")\n"," print(\"Only if error doesn't occur\")\n","except:\n"," print(\"Error parsing integer\")\n","\n","print(\"Always End\")"],"execution_count":9,"outputs":[{"output_type":"stream","text":["Always Before\n","Always unless this is the line that blows up\n","Error parsing integer\n","Always End\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"nVA48PLVPsZ9","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606767417503,"user_tz":420,"elapsed":410,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"96e2c7c4-00d9-4b9c-bac6-54435bf74657"},"source":["print(\"Always\")\n","try:\n"," print(\"Always unless this is the line that blows up\")\n"," int(\"1\")\n"," print(\"Only if error doesn't occur\")\n","except:\n"," print(\"Error parsing integer\")\n","print(\"Always\")"],"execution_count":10,"outputs":[{"output_type":"stream","text":["Always\n","Always unless this is the line that blows up\n","Only if error doesn't occur\n","Always\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"C3ePLQLBPIu-"},"source":["##Naming exceptions"]},{"cell_type":"code","metadata":{"id":"eZabnIv1PLhd","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606767545346,"user_tz":420,"elapsed":407,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"6873c979-4edb-4bad-8e5d-547c373af79b"},"source":["try:\n"," int(\"hello\")\n","except ValueError:\n"," print(\"Error parsing integer\")"],"execution_count":15,"outputs":[{"output_type":"stream","text":["Error parsing integer\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"OY_6oAQuPN3W","colab":{"base_uri":"https://localhost:8080/","height":216},"executionInfo":{"status":"error","timestamp":1606767581472,"user_tz":420,"elapsed":408,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"e84e23c0-4d3b-4c9c-a4cc-89a8e91d42bd"},"source":["try:\n"," int(\"hello\")\n","except IndexError:\n"," print(\"Error indexing\")"],"execution_count":16,"outputs":[{"output_type":"error","ename":"ValueError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"hello\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mIndexError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Error indexing\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mValueError\u001b[0m: invalid literal for int() with base 10: 'hello'"]}]},{"cell_type":"code","metadata":{"id":"Y5nw585QPSs3","colab":{"base_uri":"https://localhost:8080/","height":199},"executionInfo":{"status":"error","timestamp":1606767668203,"user_tz":420,"elapsed":377,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"046bfaf6-0429-48a3-8083-f7efecee544c"},"source":["try:\n"," x = []\n"," x[10]\n","except IndexError:\n"," print(\"Error indexing\")\n"],"execution_count":20,"outputs":[{"output_type":"error","ename":"IndexError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;31mIndexError\u001b[0m: list index out of range"]}]},{"cell_type":"code","metadata":{"id":"eH9HacQHPV1w","colab":{"base_uri":"https://localhost:8080/","height":165},"executionInfo":{"status":"error","timestamp":1606767659130,"user_tz":420,"elapsed":375,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"7cd6ce7b-2969-455c-d569-5d806eb83547"},"source":["try:\n"," x = 5 / 0\n","except ZeroDivisionError:\n"," print(\"Error dividing\")"],"execution_count":19,"outputs":[{"output_type":"error","ename":"ZeroDivisionError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m5\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;31mZeroDivisionError\u001b[0m: division by zero"]}]},{"cell_type":"markdown","metadata":{"id":"2sbXAimAPzEV"},"source":["##Multiple exceptions through naming"]},{"cell_type":"code","metadata":{"id":"nivMH4BvD4Ir","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606768191879,"user_tz":420,"elapsed":2232,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"5cd13964-c726-47f0-84c8-86dafcc3b354"},"source":["try:\n"," x = input(\"Enter a integer:\")\n"," x = int(x)\n"," print(10/x)\n","except ZeroDivisionError:\n"," print(\"Error dividing\")\n","except Exception:\n"," print(\"Error parsing integer\")"],"execution_count":26,"outputs":[{"output_type":"stream","text":["Enter a integer:0\n","Error dividing\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"DHn07nXBQU7n","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606768323047,"user_tz":420,"elapsed":2685,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"1955875e-7591-4b7a-adf1-706eae21a2f7"},"source":["try:\n"," x = input(\"Enter a integer:\")\n"," x = int(x)\n"," print(10/x)\n","except ValueError:\n"," print(\"Error parsing integer\")\n","except:\n"," print(\"Any other error\")"],"execution_count":28,"outputs":[{"output_type":"stream","text":["Enter a integer:0\n","Any other error\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"KwZoCoPXQZx9","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606768439448,"user_tz":420,"elapsed":3052,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"ea3e39bf-9a3f-4be3-d440-6959a54b999c"},"source":["try:\n"," x = input(\"Enter a integer:\")\n"," x = int(x)\n"," print(10/x)\n","except ValueError as e1:\n"," print(\"Error parsing integer: %s\" % e1)\n","except ZeroDivisionError as e2:\n"," print(\"Error dividing: %s\" % e2)\n","except:\n"," print(\"Any other error\")"],"execution_count":30,"outputs":[{"output_type":"stream","text":["Enter a integer:sfgsfdg\n","Error parsing integer: invalid literal for int() with base 10: 'sfgsfdg'\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ILey9CM83PM2","executionInfo":{"status":"ok","timestamp":1606768647001,"user_tz":420,"elapsed":2415,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"67d9e81b-482a-495b-b5d7-2a3ae89c38f5"},"source":["try:\n"," x = input(\"Enter a integer:\")\n"," x = int(x)\n"," print(10/x)\n","except (ValueError, ZeroDivisionError) as error:\n"," print(\"Either value or zero division occurred: %s\" % error)\n","except:\n"," print(\"Any other error\")"],"execution_count":37,"outputs":[{"output_type":"stream","text":["Enter a integer:0\n","Either value or zero division occurred: division by zero\n","*** tb_lineno: 5\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"VEj1vwihQqXb","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606768705801,"user_tz":420,"elapsed":2265,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"60e63ab5-7018-4ac5-9861-b8957d270e71"},"source":["try:\n"," userInput = input(\">Enter an int != 0: \")\n"," value = int(userInput) \n"," print(1/value)\n","except ValueError as value_error:\n"," print(\"ValueError: User input %s is not an int.\" % userInput)\n","except ZeroDivisionError as div_by_zero_except:\n"," print(\"ZeroDivisionError - Cannot divide by Zero\")\n","except:\n"," print(\"Something else went wrong!\")"],"execution_count":39,"outputs":[{"output_type":"stream","text":[">Enter an int != 0: sdfgd\n","ValueError: User input sdfgd is not an int.\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"2DJopuT2QzH2"},"source":["##Try/Except/If"]},{"cell_type":"code","metadata":{"id":"zoWRW-2-Q0w-","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606768941133,"user_tz":420,"elapsed":2672,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"276b7d60-fd45-4e77-c9c4-80d750ffbaaa"},"source":["try:\n"," userInput = input(\">Enter an int >0: \")\n"," value = int(userInput)\n"," print(\"End of Try clause.\")\n","except ValueError as value_error:\n"," print(value_error)\n","else:\n"," print(\"In else clause: No exception occurred\")\n"," print(\"value: %d\" % (value * 10))\n","\n","print(\"asdfsd\")"],"execution_count":45,"outputs":[{"output_type":"stream","text":[">Enter an int >0: fsdgdfg\n","invalid literal for int() with base 10: 'fsdgdfg'\n","asdfsd\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"seHIhZ4WRJOo"},"source":["try:\n"," userInput = input(\">Enter an int >0: \")\n"," value = int(userInput)#<- potential ValueError\n"," print(\"End of Try clause.\")\n","except Exception as e:\n"," print(e)\n","else:\n"," print(\"In else clause: No exception occurred and following statement is unprotected\")\n"," x = value/0"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"qVLeyCUxRXg1"},"source":["##Try/Exception/Finally"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"M15v5OMpPOz9","executionInfo":{"status":"ok","timestamp":1606769125319,"user_tz":420,"elapsed":2103,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"1ba87f76-5772-4a5b-e71e-b5427c5491c9"},"source":["try:\n"," userInput = input(\">Enter an int >0: \")\n"," value = int(userInput)\n","except ValueError as value_error:\n"," print(value_error)\n","finally:\n"," print(\"In finally clause.\")"],"execution_count":49,"outputs":[{"output_type":"stream","text":[">Enter an int >0: 1234\n","In finally clause.\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"gRs_0UVnRYzT","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606769230434,"user_tz":420,"elapsed":23119,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"2d10104a-acbf-480a-dc2b-dbe277ada9e6"},"source":["def foo():\n"," try:\n"," userInput = input(\">Enter an int >0: \")\n"," value = int(userInput)\n"," return value\n"," except ValueError as value_error:\n"," print(value_error)\n"," return None\n"," finally:\n"," print(\"In finally clause.\")\n"," \n","print(\"foo() returned: %s\" % foo())"],"execution_count":52,"outputs":[{"output_type":"stream","text":[">Enter an int >0: asdfdsf\n","invalid literal for int() with base 10: 'asdfdsf'\n","In finally clause.\n","foo() returned: None\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"ruBDjJdURefo","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1606769379600,"user_tz":420,"elapsed":5247,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"5fbf87ea-97cb-4383-b9eb-10abbad196bd"},"source":["def foo():\n"," try:\n"," userInput = input(\">Enter an int >0: \")\n"," value = int(userInput)#<- potential ValueError\n"," return value\n"," except ValueError as value_error:\n"," print(value_error)\n"," return None\n"," finally:\n"," print(\"In finally clause.\")\n"," return -1\n"," \n","print(\"foo() returned: %s\" % foo())"],"execution_count":54,"outputs":[{"output_type":"stream","text":[">Enter an int >0: adsfadsf\n","invalid literal for int() with base 10: 'adsfadsf'\n","In finally clause.\n","foo() returned: -1\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"qNMiwTIFRM3S"},"source":["try:\n"," file_handler = open(\"input.txt\")\n"," for line in file_handle:\n"," line = line.strip()\n"," int(line)\n","except:\n"," print(\"Error parsing file\")\n","finally:\n"," #cleanup\n"," file_handler.close()\n"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":187},"id":"RQbReh157j0A","executionInfo":{"status":"error","timestamp":1606769748016,"user_tz":420,"elapsed":385,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"c8ef36aa-bd7a-45de-d1f4-be5df9f5ec53"},"source":["def main():\n"," try: \n"," open(\"NotThere.txt\")\n"," except Exception:\n"," print(\"Error\")\n"," sys.exit(1)\n","\n","main()\n"],"execution_count":58,"outputs":[{"output_type":"stream","text":["Error\n"],"name":"stdout"},{"output_type":"error","ename":"SystemExit","evalue":"ignored","traceback":["An exception has occurred, use %tb to see the full traceback.\n","\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m 1\n"]},{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py:2890: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n"," warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n"],"name":"stderr"}]},{"cell_type":"markdown","metadata":{"id":"QUn-UWoxRpbn"},"source":["##Exit"]},{"cell_type":"markdown","metadata":{"id":"eDp6W_sTRtfu"},"source":["Lets you end a program immediately (The program quitting has a value attached (0) is considered exitting ok, any other value is considered error code."]},{"cell_type":"code","metadata":{"id":"O9X3UgY9RuFY","colab":{"base_uri":"https://localhost:8080/","height":173},"executionInfo":{"status":"error","timestamp":1598638493493,"user_tz":360,"elapsed":313,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"acff45e7-73c5-48cd-8743-39e66516bb2b"},"source":["import sys\n","def div(a, b):\n"," if not isinstance(a, int) or not isinstance(b, int):\n"," sys.exit(-123)\n"," if b == 0:\n"," sys.exit(123)\n"," return a/b\n","div(\"a\", 1)"],"execution_count":null,"outputs":[{"output_type":"error","ename":"SystemExit","evalue":"ignored","traceback":["An exception has occurred, use %tb to see the full traceback.\n","\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m -123\n"]},{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py:2890: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n"," warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n"],"name":"stderr"}]},{"cell_type":"code","metadata":{"id":"mTFJZYfhR5nv","colab":{"base_uri":"https://localhost:8080/","height":173},"executionInfo":{"status":"error","timestamp":1598638506710,"user_tz":360,"elapsed":340,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"802cea5b-db92-4a05-a0e7-c78fe12f2130"},"source":["import sys\n","def div(a, b):\n"," if not isinstance(a, int) or not isinstance(b, int):\n"," sys.exit(-123)\n"," if b == 0:\n"," sys.exit(123)\n"," return a/b\n","div(1, 0)"],"execution_count":null,"outputs":[{"output_type":"error","ename":"SystemExit","evalue":"ignored","traceback":["An exception has occurred, use %tb to see the full traceback.\n","\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m 123\n"]},{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py:2890: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n"," warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n"],"name":"stderr"}]},{"cell_type":"code","metadata":{"id":"DZikDKTIR8wH","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1598638513565,"user_tz":360,"elapsed":323,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"1bb600d5-c2a6-4456-f1a1-89fad7e7eaea"},"source":["import sys\n","def div(a, b):\n"," if not isinstance(a, int) or not isinstance(b, int):\n"," sys.exit(-123)\n"," if b == 0:\n"," sys.exit(123)\n"," return a/b\n","div(1, 1)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["1.0"]},"metadata":{"tags":[]},"execution_count":88}]},{"cell_type":"markdown","metadata":{"id":"18_0J_AeSDUH"},"source":["##Raise an exception (function design)"]},{"cell_type":"code","metadata":{"id":"Iho4u7GiSFme","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1598638575836,"user_tz":360,"elapsed":322,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"038cfb34-46ab-44a7-d1f2-a0ebefbe0d4b"},"source":["import sys\n","\n","def repeatStar(number):\n"," if not isinstance(number, int):\n"," raise Exception('%s not an int' % number)\n"," if number == 0:\n"," raise ValueError('parameter number is zero')\n"," return number*\"*\"\n","\n","try:\n"," repeatStar(1.5)\n","except (ValueError, Exception) as detail:\n"," print(detail) "],"execution_count":null,"outputs":[{"output_type":"stream","text":["1.5 not an int\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"HRzW_8lZSNdB","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1598638583954,"user_tz":360,"elapsed":315,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"8768041d-c103-4e59-cad3-798d8b3d70d4"},"source":["import sys\n","\n","def repeatStar(number):\n"," if not isinstance(number, int):\n"," raise Exception('%s not an int' % number)\n"," if number == 0:\n"," raise ValueError('parameter number is zero')\n"," return number*\"*\"\n","\n","try:\n"," repeatStar(0)\n","except (ValueError, Exception) as detail:\n"," print(detail) "],"execution_count":null,"outputs":[{"output_type":"stream","text":["parameter number is zero\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"asCipHERSQOI"},"source":["import sys\n","\n","def repeatStar(number):\n"," if not isinstance(number, int):\n"," raise Exception('%s not an int' % number)\n"," if number == 0:\n"," raise ValueError('parameter number is zero')\n"," return number*\"*\"\n","\n","try:\n"," repeatStar(1)\n","except (ValueError, Exception) as detail:\n"," print(detail) "],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"KmxSYLogSWNX"},"source":["##Design"]},{"cell_type":"code","metadata":{"id":"f3qNBY0RSXDg","colab":{"base_uri":"https://localhost:8080/","height":54},"executionInfo":{"status":"ok","timestamp":1598638830706,"user_tz":360,"elapsed":374,"user":{"displayName":"Jonathan Hudson","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GifRN6odU4-8ypKAmFbKYslWLQ1fivgoGwgrjiH6ZI=s64","userId":"10663523637423141362"}},"outputId":"529a169f-1563-44a8-b5f2-aea840492b68"},"source":["import os\n","import sys\n","\n","sys.argv = [\"program.py\",\"filename.txt\",\"3.14\",\"Hello, world!\"]\n","\n","EXPECTED_ARG_COUNT = 4\n","\n","def main():\n"," if len(sys.argv) != EXPECTED_ARG_COUNT:\n"," print(\"Error: Expect 4 arguments! and got %d\" % len(sys.argv))\n"," sys.exit(1)\n"," try:\n"," x = float(sys.argv[2])\n"," print(\"Float argument was: %.2f\" % x)\n"," except ValueError:\n"," print(\"Error second argument %s is not a float.\" % sys.argv[2])\n"," sys.exit(1)\n"," if not os.path.exists(sys.argv[1]):\n"," print(\"Error: File does not exist %s\" % sys.argv[1])\n"," sys.exit(1)\n","\n"," #Make file\n"," try:\n"," file = open(sys.argv[1], \"w\")\n"," file.write(sys.argv[3])\n"," except:\n"," print(\"Error: Error writing to file!\")\n"," sys.exit(1)\n"," finally:\n"," file.close()\n"," try:\n"," file = open(sys.argv[1], \"r\")\n"," print(file.readlines()[0])\n"," except:\n"," print(\"Error: Error reading from file!\")\n"," sys.exit(1)\n"," finally:\n"," file.close()\n"," \n","main()\n","\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Float argument was: 3.14\n","Hello, world!\n"],"name":"stdout"}]}]}