程序运行时,会遇到各种各样的异常情况导致程序崩溃,因此python提供了异常处理机制,在异常出现时即时捕获,然后内部“消化”,让程序继续运行
一、错误类型
语法错误:当代码内容不符合python的语法规则时报错,报错内容为SyntaxError
运行时错误:无语法规则错误,但运行时发生了错误,如进行除法运算时,除数为0
二、异常处理
try-except:
- 先执行try子句,若无异常,运行try子句后结束程序
- 若在执行try子句时发生异常,那么 try 子句余下的部分将被忽略。
- 如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
- 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。
try:
a=int(input('请输入一个整数'))
b=int(input('请输入另一个整数'))
c=a/b
print('结果为',c)
except ZeroDivisionError: #输入除数为0时的报错内容,并粘贴报错类型
print('除数不能为0')
except ValueError: #输入不为整数时的报错内容,并粘贴报错类型
print('输入类型不为数字')
多个except结构:
捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后增加BaseException(错误都是从BaseException类派生的)
try:
a=int(input('请输入一个整数'))
b=int(input('请输入另一个整数'))
c=a/b
print('结果为',c)
except ZeroDivisionError:
print('除数不能为0')
except ValueError:
print('输入类型不为数字')
except BaseException as e:
print(e)
try-except-else:
如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
try:
a=int(input('请输入一个整数'))
b=int(input('请输入另一个整数'))
c=a/b
except BaseException as e:
print(e)
else:
print('结果为',c)
try-except-else-finally:
finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
try:
a=int(input('请输入一个整数'))
b=int(input('请输入另一个整数'))
c=a/b
except BaseException as e:
print(e)
else:
print('结果为',c)
finally:
print('程序结束')
traceback模块:
import traceback
try:
print('----------')
print(10/0)
except:
traceback.print_exc() #返回报错信息,可用于后续日志部分
抛出异常raise:
raise [exceptionName [(reason)]]
try:
x=input('请输入一个字母')
if x=='1':
raise Exception('字母不能为1')
except Exception as e:
print('异常',repr(e))
#raise引发异常后,使用try-except进行捕获并处理