错误
语法错误也称编译错误,拼写错误等导致编译器无法将源代码转换为字节码
逻辑错误是程序可以执行(本身不报错)但执行结果不正确,需要根据结果来调试判断
异常
没有语法错误的前提下,在运行期间产生特定的错误
每个特定错误都对应到一个异常类对象,当发生某个特定错误时,其对应的异常类对象的实例对象会被输出
如果在程序对抛出的异常不进行捕获和处理,程序就会终止,并打印错误信息,包括
Traceback:异常调用堆栈的跟踪信息,流出了程序中的相关行数
对应的异常类对象的名称以及异常的错误信息
内置的异常类对象和自定义的异常类对象对应的错误会被看作异常
经常遇到的是exception
?Exception
异常处理
try…except…else…finally
try:可能异常的代码
except:异常后怎么处理
try:
r = 1/0
print(r)
except ArithmeticError:
print('数字异常')#父类 可捕获子类异常
try:
r = 1/0
print(r)
except ArithmeticError:
print('数字异常')
except ZeroDivisionError:
print('0错误')
try:
r = 1/0
print(r)
except ZeroDivisionError:
print('0错误')
except ArithmeticError:
print('数字异常')
当多个异常类对象对应的异常处理代码完全相同时,把异常类对象以元组形式放在一个exceot中
try:
r = 1/0
print(r)
except (TypeError,ZeroDivisionError,ValueError):
print('运行错误')
如果想在匹配的except子句中访问异常实例对象,可加as + 变量
try:
r = 1/0
print(r)
except ZeroDivisionError as e:
print('type(e)')
print(e)
try没有产生异常的时候就会运行else
finally总会执行的话
raise 手动抛出异常实例对象
raise ZeroDivisionError('0不能作为除数')
raise Warning('大胆')
如果在except中不想对异常实例对象进行处理,可以使用raise手动抛出另一个异常
try:
raise ZeroDivisionError('0不能作为除数')
except:
raise Warning('大胆')
class MyException(Exception):
pass
raise (MyException)