请稍候,加载中....

异常处理语句

异常处理语句可以帮助我们更妥善的解决程序运行过程中出现的问题,比如变量类型异常等等

try异常语句结构

# try:
#    正常执行的代码段
# except:
#    应该正常运行的部分出异常了
# else:
#     正常执行部分正常运行的后续代码

在try语句中,首先正常运行,如果出现异常,就会执行except部分的异常代码,可以输出提示,写入日志,接着else就是表示正常情况下,后续的代码,发生except情况时,else部分不执行

# 无异常处理示例1:
# 由于没有进行数据类型转换, 程序直接报错(字符串不能进行%运算)
number_1 = input("请输入一个整数:")
if number_1 % 2 == 0:
    print("您输入的数是偶数")
else:
    print("您输入的数是奇数")

# 无异常处理示例2:
# 下面的这段循环程序,因为报错直接中断, 造成程序崩溃
while True:
    number_1 = input("请输入一个整数:")
    if number_1 % 2 == 0:
        print("您输入的数是偶数")
    else:
        print("您输入的数是奇数")

会报错:TypeError: not all arguments converted during string formatting

这种报错方式不够友好,可以使用异常语句将提示变得友好。

# 使用try语句使得错误可以控制
# try语句既可以控制错误消息提示,也可以让程序变得更加健壮

number_1 = input("请输入一个整数:")
try:
    number_1 = int(number_1)
except: 
    print("发生异常,请检查您的输入")
else:
    if number_1 % 2 == 0:
        print("您输入的数是偶数")
    else:
        print("您输入的数是奇数")

ErrorType - 错误类型

异常有很多类型,比如变量类型不正确, 变量不存在,网络错误,磁盘写入错误等等,包括自己定义的错误类型,如果except后没有表达式,表示任何异常都会触发异常处理语句
查看内置异常类型

可以通过except 后面添加错误异常类型来精确的指定执行哪段异常处理语句

# 捕获异常对象消息
# 不同的错误类型有不同的错误消息
# except可以根据不同的错误类型进行不同处理
try:
    b = 10 + a
except Exception as e:
    print(e)
else:
    print("b=", b)
# 在except中使用错误类型

try:
    b = 10 + variable
except NameError :
    print("变量不存在")
except TypeError :
    print("变量类型不正确")
except Exception as e:
    print(e)
else:
    print("b=", b)

在上面这段代码中,如果执行时,不存在variable变量,那么就会执行“print("变量不存在")”,如果variable是一个字符串类型的值,那么就会执行“print("变量类型不正确")

finally语句

finally语句用于最终清理异常语句,无论try部分是否运行异常,finally语句都会执行

# 使用finally语句保证清理异常
# 无论是否存在异常,总是会输出"ok"
try:
    b = 10 + variable
except NameError :
    print("变量不存在")
except TypeError :
    print("变量类型不正确")
else:
    print(b/3)
finally:
    print("ok")

另外不要把语法错误理解成异常,语法错误程序直接挂了,连运行的机会都没有,也就没有什么异常处理报告了

# 如果有语法错误,程序不会执行
try:
    0b = 10 + 20
except:
    print("语法错误")
finally:
    print("ok")

如果try语句在异常处理中执行了breakcontinuereturn语句,finally会在之前执行

lists = [1,2,3]
n = 0
while n < 10:
    try:
        item = lists.pop()
    except IndexError as e:
        print(e)
        break
    else:
        print(item)
    finally:
        print("循环结束")

raise触发异常错误

# raise可以人为的触发异常错误,与程序异常处理流程一样
a = 10
b = 10
try:
    c = a + b
    raise TypeError("说你错就是错")
except TypeError as e:
    print(e)
finally:
    print(c)

assert断言调试

assert用于调试,如果程序不符合结果,就会引发异常

# 假设现在有一段代码要求两个数的和,但是代码写成了两个数的乘积
# a、b值为测试条件,期待结果应该是20
a = 10
b = 10
try:
    c = a * b
    assert c == 20
except AssertionError as e:
    print("请检查程序,结果不符合预期")
finally:
    print(c)

Python学习手册-