SLIDE 1
Exceptions Announcements Exceptions Today's Topic: Handling Errors - - PowerPoint PPT Presentation
Exceptions Announcements Exceptions Today's Topic: Handling Errors - - PowerPoint PPT Presentation
Exceptions Announcements Exceptions Today's Topic: Handling Errors 4 Today's Topic: Handling Errors Sometimes, computer programs behave in non-standard ways 4 Today's Topic: Handling Errors Sometimes, computer programs behave in
SLIDE 2
SLIDE 3
Exceptions
SLIDE 4
Today's Topic: Handling Errors
4
SLIDE 5
Today's Topic: Handling Errors
Sometimes, computer programs behave in non-standard ways
4
SLIDE 6
Today's Topic: Handling Errors
Sometimes, computer programs behave in non-standard ways
- A function receives an argument value of an improper type
4
SLIDE 7
Today's Topic: Handling Errors
Sometimes, computer programs behave in non-standard ways
- A function receives an argument value of an improper type
- Some resource (such as a file) is not available
4
SLIDE 8
Today's Topic: Handling Errors
Sometimes, computer programs behave in non-standard ways
- A function receives an argument value of an improper type
- Some resource (such as a file) is not available
- A network connection is lost in the middle of data transmission
4
SLIDE 9
Today's Topic: Handling Errors
Sometimes, computer programs behave in non-standard ways
- A function receives an argument value of an improper type
- Some resource (such as a file) is not available
- A network connection is lost in the middle of data transmission
Grace Hopper's Notebook, 1947, Moth found in a Mark II Computer
4
SLIDE 10
Exceptions
5
SLIDE 11
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions
5
SLIDE 12
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions Python raises an exception whenever an error occurs
5
SLIDE 13
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions Python raises an exception whenever an error occurs Exceptions can be handled by the program, preventing the interpreter from halting
5
SLIDE 14
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions Python raises an exception whenever an error occurs Exceptions can be handled by the program, preventing the interpreter from halting Unhandled exceptions will cause Python to halt execution and print a stack trace
5
SLIDE 15
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions Python raises an exception whenever an error occurs Exceptions can be handled by the program, preventing the interpreter from halting Unhandled exceptions will cause Python to halt execution and print a stack trace Mastering exceptions:
5
SLIDE 16
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions Python raises an exception whenever an error occurs Exceptions can be handled by the program, preventing the interpreter from halting Unhandled exceptions will cause Python to halt execution and print a stack trace Exceptions are objects! They have classes with constructors. Mastering exceptions:
5
SLIDE 17
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions Python raises an exception whenever an error occurs Exceptions can be handled by the program, preventing the interpreter from halting Unhandled exceptions will cause Python to halt execution and print a stack trace Exceptions are objects! They have classes with constructors. They enable non-local continuation of control Mastering exceptions:
5
SLIDE 18
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions Python raises an exception whenever an error occurs Exceptions can be handled by the program, preventing the interpreter from halting Unhandled exceptions will cause Python to halt execution and print a stack trace Exceptions are objects! They have classes with constructors. They enable non-local continuation of control If f calls g and g calls h, exceptions can shift control from h to f without waiting for g to return. Mastering exceptions:
5
SLIDE 19
Exceptions
A built-in mechanism in a programming language to declare and respond to exceptional conditions Python raises an exception whenever an error occurs Exceptions can be handled by the program, preventing the interpreter from halting Unhandled exceptions will cause Python to halt execution and print a stack trace Exceptions are objects! They have classes with constructors. They enable non-local continuation of control If f calls g and g calls h, exceptions can shift control from h to f without waiting for g to return. (Exception handling tends to be slow.) Mastering exceptions:
5
SLIDE 20
Raising Exceptions
SLIDE 21
Assert Statements
Assert statements raise an exception of type AssertionError
7
SLIDE 22
Assert Statements
Assert statements raise an exception of type AssertionError assert <expression>, <string>
7
SLIDE 23
Assert Statements
Assert statements raise an exception of type AssertionError assert <expression>, <string> Assertions are designed to be used liberally. They can be ignored to increase efficiency by running Python with the "-O" flag; "O" stands for optimized
7
SLIDE 24
Assert Statements
Assert statements raise an exception of type AssertionError assert <expression>, <string> Assertions are designed to be used liberally. They can be ignored to increase efficiency by running Python with the "-O" flag; "O" stands for optimized python3 -O
7
SLIDE 25
Assert Statements
Assert statements raise an exception of type AssertionError assert <expression>, <string> Assertions are designed to be used liberally. They can be ignored to increase efficiency by running Python with the "-O" flag; "O" stands for optimized python3 -O Whether assertions are enabled is governed by a bool __debug__
7
SLIDE 26
Assert Statements
Assert statements raise an exception of type AssertionError assert <expression>, <string> Assertions are designed to be used liberally. They can be ignored to increase efficiency by running Python with the "-O" flag; "O" stands for optimized python3 -O Whether assertions are enabled is governed by a bool __debug__
7
(Demo)
SLIDE 27
Raise Statements
8
SLIDE 28
Raise Statements
Exceptions are raised with a raise statement
8
SLIDE 29
Raise Statements
Exceptions are raised with a raise statement raise <expression>
8
SLIDE 30
Raise Statements
Exceptions are raised with a raise statement raise <expression> <expression> must evaluate to a subclass of BaseException or an instance of one
8
SLIDE 31
Raise Statements
Exceptions are raised with a raise statement raise <expression> <expression> must evaluate to a subclass of BaseException or an instance of one Exceptions are constructed like any other object. E.g., TypeError('Bad argument!')
8
SLIDE 32
Raise Statements
Exceptions are raised with a raise statement raise <expression> <expression> must evaluate to a subclass of BaseException or an instance of one Exceptions are constructed like any other object. E.g., TypeError('Bad argument!') TypeError -- A function was passed the wrong number/type of argument
8
SLIDE 33
Raise Statements
Exceptions are raised with a raise statement raise <expression> <expression> must evaluate to a subclass of BaseException or an instance of one Exceptions are constructed like any other object. E.g., TypeError('Bad argument!') TypeError -- A function was passed the wrong number/type of argument NameError -- A name wasn't found
8
SLIDE 34
Raise Statements
Exceptions are raised with a raise statement raise <expression> <expression> must evaluate to a subclass of BaseException or an instance of one Exceptions are constructed like any other object. E.g., TypeError('Bad argument!') TypeError -- A function was passed the wrong number/type of argument NameError -- A name wasn't found KeyError -- A key wasn't found in a dictionary
8
SLIDE 35
Raise Statements
Exceptions are raised with a raise statement raise <expression> <expression> must evaluate to a subclass of BaseException or an instance of one Exceptions are constructed like any other object. E.g., TypeError('Bad argument!') TypeError -- A function was passed the wrong number/type of argument NameError -- A name wasn't found KeyError -- A key wasn't found in a dictionary RecursionError -- Too many recursive calls
8
SLIDE 36
Raise Statements
Exceptions are raised with a raise statement raise <expression> <expression> must evaluate to a subclass of BaseException or an instance of one Exceptions are constructed like any other object. E.g., TypeError('Bad argument!') TypeError -- A function was passed the wrong number/type of argument NameError -- A name wasn't found KeyError -- A key wasn't found in a dictionary RecursionError -- Too many recursive calls
8
(Demo)
SLIDE 37
Try Statements
SLIDE 38
Try Statements
10
SLIDE 39
Try Statements
Try statements handle exceptions
10
SLIDE 40
Try Statements
Try statements handle exceptions try: <try suite> except <exception class> as <name>: <except suite> ...
10
SLIDE 41
Try Statements
Try statements handle exceptions try: <try suite> except <exception class> as <name>: <except suite> ...
Execution rule:
10
SLIDE 42
Try Statements
Try statements handle exceptions try: <try suite> except <exception class> as <name>: <except suite> ...
Execution rule: The <try suite> is executed first
10
SLIDE 43
Try Statements
Try statements handle exceptions try: <try suite> except <exception class> as <name>: <except suite> ...
Execution rule: The <try suite> is executed first If, during the course of executing the <try suite>, an exception is raised that is not handled otherwise, and
10
SLIDE 44
Try Statements
Try statements handle exceptions try: <try suite> except <exception class> as <name>: <except suite> ...
Execution rule: The <try suite> is executed first If, during the course of executing the <try suite>, an exception is raised that is not handled otherwise, and If the class of the exception inherits from <exception class>, then
10
SLIDE 45
Try Statements
Try statements handle exceptions try: <try suite> except <exception class> as <name>: <except suite> ...
Execution rule: The <try suite> is executed first If, during the course of executing the <try suite>, an exception is raised that is not handled otherwise, and If the class of the exception inherits from <exception class>, then The <except suite> is executed, with <name> bound to the exception
10
SLIDE 46
Handling Exceptions
11
SLIDE 47
Handling Exceptions
Exception handling can prevent a program from terminating
11
SLIDE 48
Handling Exceptions
Exception handling can prevent a program from terminating >>> try:
11
SLIDE 49
Handling Exceptions
Exception handling can prevent a program from terminating >>> try: x = 1/0
11
SLIDE 50
Handling Exceptions
Exception handling can prevent a program from terminating >>> try: x = 1/0 except ZeroDivisionError as e:
11
SLIDE 51
Handling Exceptions
Exception handling can prevent a program from terminating >>> try: x = 1/0 except ZeroDivisionError as e: print('handling a', type(e))
11
SLIDE 52
Handling Exceptions
Exception handling can prevent a program from terminating >>> try: x = 1/0 except ZeroDivisionError as e: print('handling a', type(e)) x = 0
11
SLIDE 53
Handling Exceptions
Exception handling can prevent a program from terminating >>> try: x = 1/0 except ZeroDivisionError as e: print('handling a', type(e)) x = 0 handling a <class 'ZeroDivisionError'>
11
SLIDE 54
Handling Exceptions
Exception handling can prevent a program from terminating >>> try: x = 1/0 except ZeroDivisionError as e: print('handling a', type(e)) x = 0 handling a <class 'ZeroDivisionError'> >>> x
11
SLIDE 55
Handling Exceptions
Exception handling can prevent a program from terminating >>> try: x = 1/0 except ZeroDivisionError as e: print('handling a', type(e)) x = 0 handling a <class 'ZeroDivisionError'> >>> x Multiple try statements: Control jumps to the except suite of the most recent try statement that handles that type of exception
11
SLIDE 56
Handling Exceptions
Exception handling can prevent a program from terminating >>> try: x = 1/0 except ZeroDivisionError as e: print('handling a', type(e)) x = 0 handling a <class 'ZeroDivisionError'> >>> x Multiple try statements: Control jumps to the except suite of the most recent try statement that handles that type of exception
11
(Demo)
SLIDE 57
WWPD: What Would Python Display?
How will the Python interpreter respond?
12
SLIDE 58
WWPD: What Would Python Display?
How will the Python interpreter respond?
12
SLIDE 59
WWPD: What Would Python Display?
How will the Python interpreter respond? def invert(x): inverse = 1/x # Raises a ZeroDivisionError if x is 0 print('Never printed if x is 0') return inverse def invert_safe(x): try: return invert(x) except ZeroDivisionError as e: return str(e)
12
SLIDE 60
WWPD: What Would Python Display?
How will the Python interpreter respond? >>> invert_safe(1/0) def invert(x): inverse = 1/x # Raises a ZeroDivisionError if x is 0 print('Never printed if x is 0') return inverse def invert_safe(x): try: return invert(x) except ZeroDivisionError as e: return str(e)
12
SLIDE 61
WWPD: What Would Python Display?
How will the Python interpreter respond? >>> invert_safe(1/0) >>> try: def invert(x): inverse = 1/x # Raises a ZeroDivisionError if x is 0 print('Never printed if x is 0') return inverse def invert_safe(x): try: return invert(x) except ZeroDivisionError as e: return str(e)
12
SLIDE 62
WWPD: What Would Python Display?
How will the Python interpreter respond? >>> invert_safe(1/0) >>> try: ... invert_safe(0) def invert(x): inverse = 1/x # Raises a ZeroDivisionError if x is 0 print('Never printed if x is 0') return inverse def invert_safe(x): try: return invert(x) except ZeroDivisionError as e: return str(e)
12
SLIDE 63
WWPD: What Would Python Display?
How will the Python interpreter respond? >>> invert_safe(1/0) >>> try: ... invert_safe(0) ... except ZeroDivisionError as e: def invert(x): inverse = 1/x # Raises a ZeroDivisionError if x is 0 print('Never printed if x is 0') return inverse def invert_safe(x): try: return invert(x) except ZeroDivisionError as e: return str(e)
12
SLIDE 64
WWPD: What Would Python Display?
How will the Python interpreter respond? >>> invert_safe(1/0) >>> try: ... invert_safe(0) ... except ZeroDivisionError as e: ... print('Hello!') def invert(x): inverse = 1/x # Raises a ZeroDivisionError if x is 0 print('Never printed if x is 0') return inverse def invert_safe(x): try: return invert(x) except ZeroDivisionError as e: return str(e)
12
SLIDE 65
WWPD: What Would Python Display?
How will the Python interpreter respond? >>> invert_safe(1/0) >>> try: ... invert_safe(0) ... except ZeroDivisionError as e: ... print('Hello!') >>> inverrrrt_safe(1/0) def invert(x): inverse = 1/x # Raises a ZeroDivisionError if x is 0 print('Never printed if x is 0') return inverse def invert_safe(x): try: return invert(x) except ZeroDivisionError as e: return str(e)
12
SLIDE 66
Example: Reduce
SLIDE 67
Reducing a Sequence to a Value
14
SLIDE 68
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
SLIDE 69
f is ... a two-argument function
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
SLIDE 70
f is ... a two-argument function s is ... a sequence of values that can be the second argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
SLIDE 71
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
SLIDE 72
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2)
SLIDE 73
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow
SLIDE 74
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2
SLIDE 75
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2
[ [
SLIDE 76
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1
[ [
SLIDE 77
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 2
[ [
SLIDE 78
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow 2
[ [
SLIDE 79
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow 2 2
[ [
SLIDE 80
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow 2 2 4
[ [
SLIDE 81
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow pow 2 2 4
[ [
SLIDE 82
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow pow 2 2 4 3
[ [
SLIDE 83
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow pow 2 2 4 3 64
[ [
SLIDE 84
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow pow pow 2 2 4 3 64
[ [
SLIDE 85
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow pow pow 2 2 4 3 64 4
[ [
SLIDE 86
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14
reduce(pow, [1, 2, 3, 4], 2) pow 2 1 pow pow pow 2 2 4 3 64 4 16,777,216
[ [
SLIDE 87
f is ... a two-argument function s is ... a sequence of values that can be the second argument initial is ... a value that can be the first argument
Reducing a Sequence to a Value
def reduce(f, s, initial): """Combine elements of s pairwise using f, starting with initial. E.g., reduce(mul, [2, 4, 8], 1) is equivalent to mul(mul(mul(1, 2), 4), 8). >>> reduce(mul, [2, 4, 8], 1) 64 """
14