什么是异常?

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。

异常是Python对象,表示一个错误。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行

具体的异常处理:

异常处理的几种方式:

1、使用try-except方法,可以将指定的可能会发生报错的部分放到内部消化,自身解决错误问题,使得程序继续进行

python输入错误信息提示 python输入异常处理_python

'''使用try-except方法,将指定报错部分在内部消化吸收,让程序继续执行'''
try:
    a=int(input('请输入一个整数'))
    b=int(input('请输入另一个整数'))
    result=a/b
    print('结果为:',result)
except ZeroDivisionError:
    print('除法中除数不能为0')
print('程序结束finish')
请输入一个整数10
请输入另一个整数0
除法中除数不能为0
程序结束finish

(2)如果在上述情况中输入的不是整数型数字(字母、符号、空格等),则程序依然会报错,因为except里面能消化的是ZeroDivisionError这种情况。就是程序出现的异常和except中要补的异常类型不一样。程序直接终端了

请输入一个整数q
ValueError: invalid literal for int() with base 10: 'q'

(3)当要捕获的异常和出现的异常类型不一致时,可以采用多个except结构,在结构的最后加上BaseException(当不知道会出现什么错误的时候就可以用这个)

***BaseException使用的情况:

a.前面已经有了几种异常捕捉,后面不知道还会出现什么异样,用一个BaseException来囊括其他的异常情况

b.我就是懒,直接用一个BaseException囊括所有异常情况

python输入错误信息提示 python输入异常处理_Python_02

try:
    a=int(input('请输入一个整数'))
    b=int(input('请输入另一个整数'))
    result=a/b
    print('结果为:',result)
except ZeroDivisionError:
    print('除法中除数不能为0')
except ValueError:
    print('只能输入数字串数据')
print('程序结束finish')
请输入一个整数10
请输入另一个整数qq
只能输入数字串数据
程序结束finish

2、try-except-else方法:如果try部分中有异常,则根据异常的情况执行相应的except部分;如try部分没有异常,则执行else部分

python输入错误信息提示 python输入异常处理_异常处理_03

try:
    num1=int(input('请输入一个整数'))
    num2=int(input('请再输入一个整数'))
    result=num1/num2
except ZeroDivisionError:
    print('除法中除数不能为0')
except ValueError:
    print('只能输入数字串数据')   
    # 或者如果这里不知道会出现什么异常时,就可以用BaseException
    '''except BaseException as seem:     这里的as seem是给异常情况起一个别名叫seem
              print('程序内有错误',seem)   #可以输出异常情况
    '''
else:
    print('结果为:',result)
#BaseException语句情况
请输入一个整数10
请再输入一个整数a
程序内有错误 invalid literal for int() with base 10: 'a'   
#这里前面时输出出现异常时的print,后面是这个seem里面带有的东西

3、try...except...else...finally结构

finally语块:无论是否发生异常都会执行,常常用来释放try语块中申请的资源

try:
    num1=int(input('请输入一个整数'))
    num2=int(input('请再输入一个整数'))
    result=num1/num2
except BaseException as seem:
       print('程序内有错误',seem)
else:
    print('结果为:',result)
finally:       #说实话,可有可无
    print('无论程序中是是否出现异常错误,我自己还将会继续被执行')
print('程序结束')
请输入一个整数45
请再输入一个整数5
结果为: 9.0
无论程序中是是否出现异常错误,我自己还将会继续被执行
程序结束

4、traceback模块

使用traceback模块可以打印异常信息,非异常部分继续输出

import traceback
try:
    print('This is a nice day for you to have a picnic')
    print(10/0)
except:     #这里可以可以写具体的异常类型,也可以不写,直接加冒号
    traceback.print_exc()

This is a nice day for you to have a picnic
Traceback (most recent call last):
  File "D:/Python学习/第十一章/demo9 traceback模块.py", line 9, in <module>
    print(10/0)
ZeroDivisionError: division by zero