summaryrefslogtreecommitdiff
path: root/basic_python/11_exceptions.tex
diff options
context:
space:
mode:
Diffstat (limited to 'basic_python/11_exceptions.tex')
-rw-r--r--basic_python/11_exceptions.tex292
1 files changed, 292 insertions, 0 deletions
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}