Python异常与程序调试

1、异常是什么

问题和错误、网络错误、系统错误

还有不可预料的情况,比如文件不存在、空间满了、通讯超时等等

Python的常见异常
ZeroDivisionError:比如0做除数
NameError:比如变量还没有定义的时候使用变量
TypeError:比如字符串连接整数

1.1 Python的捕获和异常处理语法

try:
程序执行语句块
except Exception as 别名:
异常处理语句块
(except可以出现多次)

else:
无异常时处理语句块
finally:
必须要处理的语句块

(try:异常的捕获,except异常语句,finally断开数据库连接)

比如说捕获未被定义的变量b,NameError

try:
    a = b + 1
except NameError as e:
    print(type(e))
    print(e)


print('2')

在这里插入图片描述
若要捕获多个就得加多个except语句

try:
    print(10 / 0)
    a = b + 1
except NameError as e:
    print(type(e))
    print(e)
except ZeroDivisionError as e:
    print(type(e))
    print(e)
except Exception as e:
    print(e)

print('2')

简化代码可以将异常语句写在小括号里二合为一

try:
    print(10 / 0)
    a = b + 1
except (NameError, ZeroDivisionError) as e:
    print(type(e))
    print(e)
except Exception as e:
    print(e)

print('2')

无异常出现时else被执行,若有异常则被捕获,不执行else

try:
    a = 1+1
    # print(10 / 0)
    # a = b + 1

except (NameError, ZeroDivisionError) as e:
    print(type(e))
    print(e)
except Exception as e:
    print(e)
else:
    print("else")
print('2')

在这里插入图片描述

finally语句,不管有没有异常,finally里面的语句都会被执行
(所以finally语句中一般放入关闭资源的一些语句)

try:
    a = 1+1
    # print(10 / 0)
    # a = b + 1

except (NameError, ZeroDivisionError) as e:
    print(type(e))
    print(e)
except Exception as e:
    print(e)
else:
    print("else")
finally:
    print("finallly")
print('2')

在这里插入图片描述

try:
    a = 1+1
    # print(10 / 0)
    a = b + 1

except (NameError, ZeroDivisionError) as e:
    print(type(e))
    print(e)
except Exception as e:
    print(e)
else:
    print("else")
finally:
    print("finallly")
print('2')

在这里插入图片描述

python中所有的异常都是类,都是Exception的子类
(所以首字母都是大写的)

异常时需要事先定义然后才能使用的,python预先定义好的可以直接使用

一些常见的python内置异常如下:

1.2 主动抛出异常

raise

若捕获到了不知道如何处理的异常,我希望返回给调用我的人去处理

比如上面代码,可以将raise加在Exception语句后面,捕获异常然后将异常抛出,raise后面可以不带参数

raise后面带参数的话,可以按照我们的需求去抛出我们期望的类型,供调用者去处理,相当于将类实例化(name加小括号就相当于将类实例化)

try:
    a = 1 + 1
    # print(10 / 0)
    # a = b + 1
    a = int('abc')
except (NameError, ZeroDivisionError) as e:
    print(type(e))
    print(e)
except Exception as e:
    print(e)
    print(type(e))
    raise NameError('这是一个valueError')
else:
    print("else")
finally:
    print("finallly")
print('2')

1.3 创建自定义异常

解决一些特有的异常

先定义

class TranError(Exception):
    def __init__(self, errorCode=500000, message='tranError'):
        self.errorCode = errorCode
        self.message = message

    def __str__(self):
        return "[%d] %s" %(self.errorCode, self.message)

将定义引用进来然后使用,

from ch8.TranError import TranError


try:
    a = 1 + 1

    raise TranError(500001, 'tranError')
except (NameError, ZeroDivisionError) as e:
    print(type(e))
    print(e)
except Exception as e:
    print(e)
    print(type(e))
else:
    print("else")
finally:
    print("finallly")
print('2')

在这里插入图片描述

2、程序调试 debug

debug:对程序调试的一种方法和能力

断点:让程序停下来的那个点(在行号点一下,出现红色)
比如在第7行停下来
在这里插入图片描述
然后debug
在这里插入图片描述

点击Step Over可以让程序一行一行运行

断点跳转

可以设置多个断点,调试完直接跳到下一个断点
(点击Run to Cursor )

每个开发工具都会有各自的调试方法,依赖于开发工具

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值