常见异常类型
ZeroDivisionError:除(或取模)零(所有数据类型)
IndexError:序列中没有此索引(index)
KeyError:映射中没有这个键
NameError:未声明、初始化对象(没有属性)
SyntaxError:Python语法错误
ValueError:传入无效的参数
# print(10/0) #ZeroDivisionError
lst=[11,22,33]
# print(lst[3]) #IndexError 索引从0开始
dic={'name':'张三','age':20}
# print(dic['gender']) #KeyError
# print(num) #NameError
# int a=20 #SyntaxError
# a=int('hello') #ValueError
异常处理机制
Python提供了异常处理机制,可以在异常出现时及时捕获,然后内部消化,让程序继续运行
try-except-
try:
可能会出异常的代码
except 异常类型xxError:
异常处理代码
例:
a=int(input('请输入第一个整数'))
b=int(input('请输入第二个整数'))
re=a/b
print('结果为:',re)
#加入try-except-处理后
try:
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
re = a / b
print('结果为:', re)
except ZeroDivisionError:
print('除数不允许为0!')
print('程序结束!')
try-except-except-
捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后增加BaseException
try:
可能会出异常的代码
except Exception1:
异常处理代码
except Exception2:
异常处理代码
except BaseExcepyion:
异常处理代码
例:
try:
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
re = a / b
print('结果为:', re)
except ZeroDivisionError:
print('除数不允许为0!')
except ValueError:
print('只能输入数字串!')
except BaseException as e:
print(e)
print('程序结束!')
try-except-else-
如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
例:
try:
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
re = a / b
except BaseException as e:
print('出错了',e)
else:
print('结果为:', re)
try-except-else-finally
finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
例:
try:
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
re = a / b
except BaseException as e:
print('出错了',e)
else:
print('结果为:', re)
finally:
print('谢谢您的使用!')
使用traceback模块打印异常信息
import traceback
try:
可能异常的代码
except:
traceback.print_exc()
例:
import traceback
try:
print('---------')
print(10/0)
except:
traceback.print_exc()