【CS 61a study notes 8】Exceptions

Handling errors

Exception

A built-in mechanism in a programming language to declare and respond to exceptional conditions.

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

  • Exceptions are objects ,which have classes with constructor.
  • They enable non-local continuations of control:
    • If f calls g and g calls h ,exceptions can shift control from h to f without waiting for g to return

Raising Exceptions

Assert Statements

Assert statement 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.
Whether assertions are enabled is governed by a bool _debug_ ._debug_ is False in ‘python -o’ environment.

Raise Statements

raise <expression>
<expression> must evaluate to a subclass of BaseException or an instance of one.
Exceptions are constructed like any other object. E.g. raise TypeError(‘Bad argument’)

Try Statements

try:
	# <try suite>
	... this line always gets executed
	... maybe this one too...
except <exception class> as <name>:
	<except suite>
finally:
	... this will alwayd run at the end

Execution rules

  1. The <try suite> is executed first.
  2. If, during the course of executing the <try suite> , an exception is raised that is not handled otherwise .
  3. If the class of the exception inherits from <exception class> ,then the <except suite> is executed ,with <name> bound to the exception

Exception handling can prevent a program from terminating

try:
	x = 1/0
except ZeroDivisionError as e
	print('handling a ', type(e))
	x = 0

Multiple try statements: Control jumps to the except suite of the most recent try statement that handled that type of exception.

Example : reduce

from operator import add, mul, truediv
def divide_all(n, ds):
	try:
		return reduce(truediv, ds, n)
	except ZeroDivisionError:
		# python's infinite 
		return float('inf')  

def reduce(f, s, initial):
	""" combine elements of s using f starting with the value of initial
	>>> reduce(mul,[2,4,8],1)
	64
	>>> reduce(add,[1,2,3,4],0)
	10
	"""
	for x in s:
		initial = f(initial,x)
	return initial
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值