From 2c5145f262e82996c9c2424159e5eb5dde47fae7 Mon Sep 17 00:00:00 2001
From: Prabhu Ramachandran
Date: Tue, 15 May 2018 19:17:01 +0530
Subject: Reorganize files so order is obvious.

---
 basic_python/11_exceptions.tex | 292 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 292 insertions(+)
 create mode 100644 basic_python/11_exceptions.tex

(limited to 'basic_python/11_exceptions.tex')

diff --git a/basic_python/11_exceptions.tex b/basic_python/11_exceptions.tex
new file mode 100644
index 0000000..8b9eb46
--- /dev/null
+++ b/basic_python/11_exceptions.tex
@@ -0,0 +1,292 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Tutorial slides on Python.
+%
+% Author: FOSSEE
+% Copyright (c) 2017, FOSSEE, IIT Bombay
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[14pt,compress]{beamer}
+\input{macros.tex}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Title page
+\title[Exceptions]{Python language: exceptions}
+
+\author[FOSSEE Team] {The FOSSEE Group}
+
+\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
+\date[] {Mumbai, India}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DOCUMENT STARTS
+\begin{document}
+
+\begin{frame}
+  \titlepage
+\end{frame}
+
+\begin{frame}{Motivation}
+    \begin{itemize}
+        \item How do you signal errors to a user?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Exceptions}
+  \begin{itemize}
+  \item Python's way of notifying you of errors
+  \item Several standard exceptions: \texttt{SyntaxError}, \texttt{IOError}
+    etc.
+  \item Users can also \texttt{raise} errors
+  \item Users can create their own exceptions
+  \item Exceptions can be ``caught'' via \texttt{try/except} blocks
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Exceptions: examples}
+ \begin{lstlisting}
+In []: while True print('Hello world')
+ \end{lstlisting}
+\pause
+  \begin{lstlisting}
+File "<stdin>", line 1, in ?
+    while True print('Hello world')
+                   ^
+SyntaxError: invalid syntax
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Exceptions: examples}
+ \begin{lstlisting}
+In []: print(spam)
+\end{lstlisting}
+\pause
+\begin{lstlisting}
+Traceback (most recent call last):
+  File "<stdin>", line 1, in <module>
+NameError: name 'spam' is not defined
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Exceptions: examples}
+ \begin{lstlisting}
+In []: 1 / 0
+\end{lstlisting}
+\pause
+\begin{lstlisting}
+Traceback (most recent call last):
+  File "<stdin>", line 1, in <module>
+ZeroDivisionError: integer division
+or modulo by zero
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Exceptions: examples}
+\begin{lstlisting}
+In []: '2' + 2
+\end{lstlisting}
+\pause
+\begin{lstlisting}
+Traceback (most recent call last):
+  File "<stdin>", line 1, in ?
+TypeError: cannot concatenate 'str' and 'int' objects
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Processing user input}
+  \begin{lstlisting}
+prompt = 'Enter a number(Q to quit): '
+a = input(prompt)
+
+num = int(a) if a != 'Q' else 0
+  \end{lstlisting}
+  \emphbar{What if the user enters some other alphabet?}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Handling Exceptions}
+  Python provides a \typ{try} and \typ{except} clause.
+  \begin{lstlisting}
+prompt = 'Enter a number(Q to quit): '
+a = input(prompt)
+try:
+    num = int(a)
+    print(num)
+except:
+    if a == 'Q':
+        print("Exiting ...")
+    else:
+        print("Wrong input ...")
+  \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Handling Exceptions a little better}
+  Use specific exceptions; avoid blanket except clauses
+  \begin{lstlisting}
+prompt = 'Enter a number(Q to quit): '
+a = input(prompt)
+try:
+    num = int(a)
+    print(num)
+except ValueError:
+    if a == 'Q':
+        print("Exiting ...")
+    else:
+        print("Wrong input ...")
+  \end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Exceptions: examples}
+  \small
+\begin{lstlisting}
+prompt = "Enter a number: "
+while True:
+    try:
+        x = int(input(prompt))
+        break
+    except ValueError:
+        print("Invalid input, try again...")
+
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Catching multiple exceptions}
+  \small
+\begin{lstlisting}
+while True:
+    try:
+        data = input()
+        x = int(data.split(',')[1])
+        break
+    except IndexError:
+        print('Input at least 2 values.')
+    except ValueError:
+        print("Invalid input, try again...")
+
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Catching multiple exceptions}
+\begin{lstlisting}
+data = input()
+try:
+    x = int(data.split(',')[1])
+except (ValueError, IndexError):
+    print("Invalid input ...")
+
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{\typ{try, except, else}}
+  \small
+\begin{lstlisting}
+while True:
+    try:
+        data = input()
+        x = int(data.split(',')[1])
+    except (ValueError, IndexError):
+        print("Invalid input ...")
+    else:
+        print('All is well!')
+        break
+  \end{lstlisting}
+
+\end{frame}
+
+
+\begin{frame}
+  \frametitle{Some comments}
+  \begin{itemize}
+  \item In practice NEVER use blanket except clauses
+  \item Always catch specific exceptions
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Exceptions: raising your exceptions}
+\small
+\begin{lstlisting}
+>>> raise ValueError("your error message")
+Traceback (most recent call last):
+  File "<stdin>", line 2, in ?
+ValueError: your error message
+\end{lstlisting}
+\end{frame}
+
+
+
+\begin{frame}[fragile]
+  \frametitle{Exceptions: try/finally}
+  \small
+\begin{lstlisting}
+while True:
+    try:
+        x = int(input(prompt))
+        break
+    except ValueError:
+        print("Invalid number, try again...")
+    finally:
+        print("All good!")
+
+      \end{lstlisting}
+      \normalsize
+      Always runs the finally clause!
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Exceptions: try/finally}
+  \begin{lstlisting}
+def f(x):
+    try:
+        y = int(x)
+        return y
+    except ValueError:
+        print(x)
+    finally:
+        print('finally')
+
+>>> f(1)
+>>> f('a')
+\end{lstlisting}
+Always runs the finally clause!
+\end{frame}
+
+
+\begin{frame}
+  \frametitle{Summary}
+  \begin{itemize}
+  \item Catching exceptions with \typ{try/except}
+  \item Catching multiple exceptions
+  \item Cleanup with \typ{finally}
+  \item Raising your own exceptions
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{What next?}
+  \begin{itemize}
+  \item Only covered the very basics
+  \item More advanced topics remain
+  \item Read the official Python tutorial:
+    \url{docs.python.org/tutorial/}
+  \end{itemize}
+\end{frame}
+
+\end{document}
-- 
cgit 

