书接上回:
1. 异常简介
(1)异常:遇到异常可以继续正常执行,不会终止
(2)python中的异常继承层次
BaseException
|
-------------------------------------------------------------------------------
| | | |
KeyBoardInterrupt Exception SystemExit GeneratorExit
|
NameError/ValueError等
2. try…except结构
(1)格式:
try:
可能引发异常的语句块
except[ BaseException [as e]]: # e:异常对象
异常处理语句块
例2:
import traceback
try:
print('1')
a=3/0
print('2') # skip
except:
print('error')
3. try 多个except结构
(1)格式:
try:
可能引发异常的语句块
except Exception1:
异常1处理语句块
except Exception2:
异常2处理语句块
...
except BaseException [as e]:
异常处理语句块
例3:
try:
a = float(input('please input the dividend:'))
b = float(input('please input the divisor:'))
c = a/b
print('%d / %d = %d' % (a, b, c))
except ZeroDivisionError:
print('divisor shouldn\'t be zero')
except ValueError:
print('string shouldn\'t be input')
except BaseException as e:
print(e)
4. try...except(可以多个)...else结构
(1)try里是可能有异常的语句块,如果有异常则进入except,没有异常则进入else
例4:
try:
a = float(input('please input the dividend:'))
b = float(input('please input the divisor:'))
c = a/b
except ZeroDivisionError:
print('divisor shouldn\'t be zero')
except ValueError:
print('string shouldn\'t be input')
except BaseException as e:
print(e)
else:
print('%d / %d = %d' % (a, b, c))
5. try...except...finally结构
(1)说明:try里是可能有异常的语句块,无论是否有异常,一定会进入finally。
(2)典型应用:处理文件时,最后一定要关闭该文件
例5:
try:
a = float(input('please input the dividend:'))
b = float(input('please input the divisor:'))
c = a/b
except ZeroDivisionError:
print('divisor shouldn\'t be zero')
except ValueError:
print('string shouldn\'t be input')
except BaseException as e:
print(e)
else:
print('%d / %d = %d' % (a, b, c))
finally:
print('end !')
6. 常见异常
(1)ZeroDivisionError :除0异常
(2)ValueError :字符串不能当做数字做运算
(2)NameError :访问一个没有声明的变量
(3)SyntaxError : 语法异常
(4)IndexError : 数组越界
(5)TypeError : 类型异常, 例如数字和字符串不能相加
(6)KeyError : 字典没有这个key
(7)AttributeError :对象不存在这个属性
7. traceback
(1)作用:打印详细的错误信息,并且可以把错误信息存储到日志文件中
例7:
try:
a = 1/0
except BaseException as e:
with open(r"C:\Users\qinglan.he\Desktop\traceback.txt","a") as f:
traceback.print_exc(file=f)
8. 自定义异常
例8:
class MyError(Exception): # 继承Exception
def __init__(self, age):
Exception.__init__(self)
self.age = age
def print_error(self):
print('age arror! age shouldn\'t be ', self.age)
if __name__ == '__main__':
age = 200
if age > 150:
my_error = MyError(age)
my_error.print_error()