Python-异常学习总结

概念

Python常见有两种错误:语法错误(syntax errors)和异常(exceptions)

  1. 语法错误:也被称作解析错误,即语法分析器指出错误行,并且在检测到错误的位置前面显示一个小“箭头”。 错误通常是由箭头前面的代码引起的 。
  2. 异常:程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

异常处理

  1. try…except
    try 语句按照如下方式工作;

    • 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
    • 如果没有异常发生,忽略 except 子句,try 子句执行后结束。
    • 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。
    • 如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
    • 如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

try:
		执行代码
except 差常类型:
		发生异常执行代码
except 差常类型:
		发生异常执行代码
except	其他:
		发生异常执行代码

例子:
try:
    num = int(input('请输入一个整数:'))
    result = 8 /num
except ZeroDivisionError:
#ZeroDivisionError 不能为0的异常类型
    print('0不能做除数')
except ValueError:
#ZeroDivisionError 不是正确值的异常类型
    print('请输入正确的值')
except Exception as r:
#将Exception 其他错误付给r,并由r输出错误内容
    print('未知错误!!',r)
测试结果:
1. 输入正确数字
请输入一个整数:2
4.0

2. 输入字符
请输入一个整数:as
请输入正确的值

3. 输入0
请输入一个整数:0
0不能做除数

4.其他
没测试出来,但是若有其他错误,会显示错误类型内容
  1. try…except…else
try:
		执行代码
except:
		发生异常执行代码
else:
		没有异常发生执行的代码


例子:
try:
    num = int(input('请输入一个数字:'))
except:
    print('请输入正确的整数!!!!')
elseprint('*' * 50)

结果:
请输入一个数字:as
请输入正确的整数!!!!
#如果错误输入,显示except内容
请输入一个数字:12
**************************************************
#如果正确输入,显示else内容
  1. try…except…else…finally
try:
		执行代码
except:
		发生异常执行代码
else:
		没有异常发生执行的代码
finally:
		不管有没有异常都会执行的代码

例子:
try:
    num = int(input('请输入一个整数:'))
    result = 8 /num
except ZeroDivisionError:
    print('0不能做除数')
except Exception as r:
    print('未知错误!!',r)
else:
    print('hello')
finally:
    print('!!!!!!')

结果:
请输入一个整数:12
hello
!!!!!!

请输入一个整数:as
未知错误!! invalid literal for int() with base 10: 'as'
!!!!!!
  1. 异常函数嵌套
函数的错误:一级一级向上去找的 最终会将异常传递到主函数中去
def demo1():
    try:
        return int(input('请输入正确的整数:'))
    except Exception as f:
        print('未知错误 %s' %f)
def demo2():
    return demo1()

print(demo2())
结果:
请输入正确的整数:asd
未知错误 invalid literal for int() with base 10: 'asd'
None

抛出异常

raise 语句允许程序员强制抛出一个指定的异常。异常必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
抛出异常,必须进行捕获,若不然代码会报错

def input_passwd():
    # 1.提示用户输入密码
    pwd = input('请输入密码:')
    # 2.判断密码长度
    if len(pwd) >= 8:
        return pwd
    # 3.如果<8就主动抛出异常
    print('主动抛出异常')
    # a.创建异常对象
    ex = Exception('密码长度不够,必须大于8位')
    # b.主动抛出
    raise ex


try:
    print(input_passwd())
except Exception as re:
    print(re)
"""
请输入密码:sf
主动抛出异常
密码长度不够,必须大于8位
"""
print(input_passwd())
"""
只抛出而不捕获 代码会报错
请输入密码:sf
主动抛出异常
Traceback (most recent call last):
  File "e:/VScode/python/04.py", line 28, in <module>
    print(input_passwd())
  File "e:/VScode/python/04.py", line 21, in input_passwd
    raise ex
Exception: 密码长度不够,必须大于8位
"""

断言

assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。

断言:可以理解为提前预言 让人更好地知道错误原因
asset 条件为false时执行

def func(num,div):
    assert (div !=0),'div不能为0'
    return num /div
print(func(10,0))

Traceback (most recent call last):
  File "e:/VScode/python/05.断言.py", line 12, in <module>
    print(func(10,0))
  File "e:/VScode/python/05.断言.py", line 10, in func
    assert (div !=0),'div不能为0'
AssertionError: div不能为0
#上面一行为断言显示内容,主要给予提示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值