Python异常与程序调试

您所在的位置:网站首页 程序调试中常见的错误有哪些方面 Python异常与程序调试

Python异常与程序调试

2024-07-14 16:34| 来源: 网络整理| 查看: 265

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 )

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3