python的异常处理和调试

python之异常处理及程序调试 1. Python中常见的异常 异常 描述 NameError 尝试访问一个没有声明的变量引发的错误 IndexError 索引超出序列范围引发的错误 IndentationError 缩进错误 ValueError 传入的值错误 KeyError 请求一个不存在的字典关键字引发的错误 IOError 输入输出错误(如要读取的文件不存在) ImportErr... 阅读详情

异常处理

  • 概述:在程序运行过程中,总会遇到到各种各样的错误,有的错误是编程代码有问题造成的,这种错误通常称为BUG,BUG是必须修复的。有的错误时用户输入造成的,这种错误可以通过检查用户的输入来做响应处理。还有一种错误是完全无法再程序运行过中预测的,比如写文件的时候,磁盘满了,写不进去了。在比如从网络中抓取数据,突然断网了,通常这种情况称为异常,在程序中必须要处理的,否则程序会应为各种问题而结束。

  • 遇到错误,最原始的方式解决是事先约定一个错误代码,这样就知道是否有错误,在操作系统提供的调用中非常常用

  • 缺陷:
    1、函数本身返回的数据与错误代码会混在一起,需要大量的判断是否出错
    2、一旦出错,要一级一级上报,直到某个函数可以处理

‘’'try……except……else语句
格式
try:
语句t
except 错误表示码1 as e:
语句1
except 错误表示码2 as e:
语句2
……
except 错误表示码n as e:
语句n
else:
语句e
作用:用来检测“语句t”中的错误,从而让except语句捕获异常并处理
逻辑:
1、如果try后的“语句t”执行时发生异常,就跳回到执行try并执行一个匹配该异常的except子句,异常处理结束,就结束整个try语句(除非处理异常时又引发新的异常)
2、如果try后的“语句t”执行时发生异常,但是却没有匹配的except子句,异常提交到上一级try,或者到程序的最上层
3、如果try后的“语句t”执行时没有发生异常,就不会匹配except子句,如果有else语句,则执行“语句e”,最后结束这个try语句

try……except……else语句

  • 格式
    try:
    语句t
    except 错误表示码1 as e:
    语句1
    except 错误表示码2 as e:
    语句2
    ……
    except 错误表示码n as e:
    语句n
    else:
    语句e
  • 作用:用来检测“语句t”中的错误,从而让except语句捕获异常并处理
  • 逻辑:
    1、如果try后的“语句t”执行时发生异常,就跳回到执行try并执行一个匹配该异常的except子句,异常处理结束,就结束整个try语句(除非处理异常时又引发新的异常)
    2、如果try后的“语句t”执行时发生异常,但是却没有匹配的except子句,异常提交到上一级try,或者到程序的最上层
    3、如果try后的“语句t”执行时没有发生异常,就不会匹配except子句,如果有else语句,则执行“语句e”,最后结束这个try语句

异常处理(try…except…finally语句)

  • 格式
    try:
    语句t
    except 错误表示1 as e:
    语句1
    except 错误表示2 as e:
    语句1
    ……
    except 错误表示n as e:
    语句n
    finally:
    语句f
  • 作用
    作用:无论try语句是否发生异常,都将执行“语句f”

调试

写好的代码能直接运行的概率非常小,总会在不经意间出现各种各样的BUG,有的BUG很简单,看看错误提示就能修改,但是有的BUG很复杂,需要一些调试的手段来发现并解决错误

print调试

print是最简单最原始的调试方式

  • 缺点:将来得删除调试的print,运行结果也会包含一些垃圾信息

断言

  • 使用:凡是用print来辅助调试的地方,都可以换成断言(assert)语句
  • 逻辑:当程序执行到assert语句时,首先计算第一个表达式的值,如果表达式的值为真则继续向下运行,否则断言失败,assert语句会抛出AssertionError异常,异常的信息为第二个表达式的值
  • 缺点:如果将所有的print换成assert也好不到哪里去
  • 优点:在启动程序可以通过命令添加-0参数关闭assert
def func(x):
    assert x != 0, "x is zero"
    return 10 / x
func(0)

logging 调试

  • 使用:把print替换成logging也可以,和assert相比logging不会抛出错误,把错误输入到文件
import logging

#配置输出级别
logging.basicConfig(level=logging.ERROR)
'''
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
'''


def func(x):
    logging.error("x = %d"%(x))
    return 10 / x
func(0)

logging模块详细介绍

pdb自定义开始断点

pdb是一个基于命令行的调试工具,只需要引入内置的pdb模块,并运行set_trace函数就可以触发调试器。通常将这两个操作写在一行中便于将其注释。
命令 简写命令 作用
break b 设置断点
continue c 继续执行程序,直到下一个断点或调用点
list l 查看当前行的代码段
step s 进入函数
return r 执行代码直到从当前函数返回
quit q 中止并退出
next n 执行下一行
print p 打印变量的值
help h 帮助
args a 查看传入参数
回车 重复上一条命令
break b 显示所有断点
break lineno b lineno 在指定行设置断点
break file:lineno b file:lineno 在指定文件的行设置断点
clear num 删除指定断点
bt 查看函数调用栈帧

e = 0
print('----------------------0')
#自定义开始断点
pdb.set_trace()
f = 5
print(1 / e)


# 输出
"""
----------------------0
> e:\python1903\python 基础\day15\code\7、调试(pdb的自定义开始断点).py(11)<module>()
-> f = 5
(Pdb) 
""""

IDE断点调试

断点调试介绍

测试

函数的单元测试

  • 单元测试
    • 作用:用来对一个函数、一个类或者一个模块来进行正确性检测的工具
    • 意义:
      1、假设对函数的代码进行了修改,只需在跑一次单元测试,如果通过,说明此时的修改不会对函数原有的行为造成影响。如果不通过,说明此次的修改与原有行为不一致,要么修改代码,要么修改测试
      2、确保一个程序模块的行为符合设计的测试用例,在将来修改的时候可以极大的保证该模块依然正确
    • 结果:
      1、单元测试通过:说明测试的这个函数或者类能够正常工作
      2、单元测试不通过:要么有BUG,要么测试条件不正确
# calculater模块
def mySum(x, y):
    ret = x + y + 1
    a = 1
    return  ret

def mySub(x, y):
    ret = x - y
    return ret

# main 模块
from calculater import mySum, mySub
if __name__ == "__main__":
    ret1 = mySum(1, 2)
    if ret1 == 3:
        print("ret1 = %d"%ret1)
    #认为正确
    ret2 = mySum(3, 4)
    if ret2 == 8:
        print("ret2 = %d"%ret2)

# test模块
#测试模块
import unittest
from calculater import mySum, mySub

#定义测试类
class Test(unittest.TestCase):
    #测试开始之前调用
    def setUp(self):
        print("开始测试……")

    # 测试结束之后调用
    def tearDown(self):
        print("结束测试……")

    #测试函数名:test__待测试函数名
    #注意:其实也可以不是待测试的函数名
    #本质:只要是以test__开头的函数都会被执行
    def test__mySum(self):
        self.assertEqual(mySum(2, 2), 4)
    def test__mySub(self):
        self.assertEqual(mySub(4, 2), 2)


if __name__ == "__main__":
    unittest.main()

对类进行单元测试

  • myDict模块
class MyDict(dict):
    def __init__(self, *args, **kwargs):
        print("----------1")
        super().__init__(*args, **kwargs)
    def __setattr__(self, key, value):
        print("-----------2")
        self[key] = value
    def __getattr__(self, item):
        try:
            print("--------3")
            return self[item]
        except KeyError as e:
            raise AttributeError("dict not have the key")

    def run(self):
        pass

  • test 模块

import unittest

from myDict import MyDict

#定义测试类
#类名:Test待测试类名
class TestMyDict(unittest.TestCase):
    def setUp(self):
        print("开始测试")
    def tearDown(self):
        print("结束测试")


    # # 实例化阶段
    def test_init(self):
        d = MyDict(a=1, b=2)
        # 断言
        self.assertEqual(d.a, 1)
        self.assertEqual(d.b, 2)
        self.assertTrue(isinstance(d, dict))
    # #
    # # 测试设置属性
    def test__key(self):
        d = MyDict()
        d["key"] = 1
        self.assertTrue("key" in d)
        self.assertEqual(d["key"], 1)
    def test__attr(self):
        d = MyDict()
        d.key = 1
        self.assertTrue("key" in d)
        self.assertEqual(d["key"], 1)


    #判断
    def test__keyerror(self):
        d = MyDict()
        #通过d["key"]访问不存在的属性抛出KeyError异常
        with self.assertRaises(KeyError):
            value = d["key"]
    def tset__attrerror(self):
        d = MyDict()
        # 通过d.key访问不存在的属性抛出AttributeError异常
        with self.assertRaises(AttributeError):
            value = d.key


    #对象函数的测试
    def test__run(self):
        d = MyDict()
        d.run()

if __name__ == "__main__":
    unittest.main()


doctest模块

  • 该模块可以直接提取注释中的代码并执行测试
import doctest

def mySum(x, y):
    # doctest严格按照python交互式命令的输入和输出来判断测试结果是否正确
    '''
    >>> print(mySum(1, 2))
    3
    '''
    return x + y + 1

if mySum(1, 2) == 3:
    print("bingle is a good man")



if mySum(1, 1) == 3:
    print("bingle is a nice man")


# 提取注释中代码执行
doctest.testmod()



Python异常处理与调试技巧 1. 背景介绍 在编写Python程序时,难免会遇到各种错误和异常。这些错误和异常可能是由于代码逻辑错误、输入数据错误、网络连接问题等原因引起的。为了保证程序的稳定性和可靠性,我们需要对这些错误和异常进行处理和调试。 Python提供了丰富的异常处理和调试工具,可以帮助我们快速定位和解决问题。本文将介绍Python异常处理和调试的基本概 阅读详情

相关推荐

Python异常处理与调试技巧精讲

本文深入探讨了Python中的异常处理和调试技术。首先通过实际代码示例展示了如何调试并修复类型错误,然后介绍了Python 3.7中的新特性breakpoint(),使调试更为便捷。文章接着详细阐述了Python异常处理的重要性,区分了语法错误和运行时错误,并通过具体例子解释了如何使用try-except语句来优雅地处理运行时错误,避免程序非正常终止。

weixin_28787801的博客 375

Python零基础入门(十一)——异常处理

本篇博客介绍了异常处理在编程中的重要性以及相关的语句和技巧。首先,文章概述了异常的定义和作用。接下来,介绍了三种常见的异常处理语句:try-except 语句、try-except-else 语句和 try-except-finally 语句。此外,还介绍了 raise 语句主动抛出异常的方法。在讲解完异常处理语句后,提供了几种程序调试的技巧。

一名机电研究生的博客 3257

Latex在VSCODE中编译报错`Recipe terminated with error. Retry building the project.

Latex在VSCODE中编译报错Recipe terminated with error. Retry building the project. 1 报错提示: Recipe terminated with error 2 报错原因 大概率的原因是因为latex没有添加到系统环境变量中,所有设置的编译工具没有办法找到才出现的这种情况 3 解决方案 请按照如下方式进行系统变量的添加 对windows,win+R 然后输入sysdm.cpl 在高级中选择环境变量 找到path环境变量,将txtlive中

呆呆象呆呆的博客 3万+

从C到Py:Python的异常处理

简单讲解一下有关Python中的异常处理,既有在代码中有显式表达的异常处理语法,还包括Pycharm手动调试的简单操作

zhuoer_GG的博客 1451

《AI应用架构师智能特征工程实践的前沿趋势解读》

面对传统方法的局限性,智能特征工程(Intelligent Feature Engineering)应运而生。智能特征工程是指利用人工智能、机器学习和自动化技术,实现特征提取、构造、选择和优化过程的自动化、智能化和可扩展化的方法和技术体系。效率提升:将数据科学家从繁琐的人工特征工程中解放出来,大幅缩短特征开发周期。质量保障:通过系统化方法发现人类难以察觉的特征模式,提高特征质量和模型性能。可扩展性:能够处理大规模、高维度和多类型的数据,适应不同领域和场景。降低门槛。

大数据洞察的博客 1181

什么是三极管推挽电路

当没有信号输入时,电源通过PNP三极管EB间的二极管,然后通过NPN三极管BE间而二极管到地,这时这两个三极管都是导通的,三极管很容易由于电流过大而损坏。当输入信号为VCC时,上面的三极管导通,下面的三极管截止,输出信号为VCC-0.7V,这个0.7V就是上面NPN三极管BE间的导通压降。比如上面的三极管导通,那么输出电压就是输入电压减去0.7V,所以下面的PNP三极管由于基极电压大于发射极电压,是不会导通的。这是一个三极管推挽电路,上面是一个NPN的三极管,下面是一个PNP的三极管。

谢谢关注“小鱼教你模数电”,各平台同号 3372

Python基础(7)- python各类模块、正则表达式、元字符、异常处理

一、时间模块tips: 在python中for循环’不’能开辟自己的作用域 在python中if…else…’不’能开辟自己的作用域☆在python中只有函数、类、模块这三个东西可以开辟自己独立的作用域!什么是模块? 模块就是.py文件一、时间模块 import time time.sleep(10)时间表示形式 1、时间戳 time.time()2、时间字符串 time.strft

ElijahYang的博客 835

带硬约束的物理信息神经网络(PINN with Hard Constraint)示例及代码

本文以一个案例介绍了带硬约束的物理信息神经网络的原理及实现步骤。

m0_72768523的博客 5357

Python 异常处理及程序调试

其中,ExceptionName表示要捕获的异常名称,如果在其右侧加上as alias,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。在使用时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中,这样,当try语句块中的代码出现错误时,就会执行except语句块中的代码,如果try语句块中的代码没有错误,那么except语句块将不会执行。添加断点的方法是:在想要添加断点的行上,单击鼠标右键,在弹出的快捷菜单中选择“Set Breakpoint”菜单项。

m0_59745705的博客 630

Lenovo 拯救者15ISK硬件升级实战:从内存到固态硬盘的全面优化

本文详细介绍了为联想拯救者15ISK笔记本电脑进行硬件升级的完整实战指南。通过评估升级可行性,指导如何挑选兼容的内存条与NVMe固态硬盘,并提供详细的拆机安装步骤与系统安装避坑技巧。升级后,笔记本的开机速度、软件加载及多任务处理能力获得飞跃式提升,让老旧设备重获新生。

weixin_29310631的博客 556

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 dma,实现零拷贝.

J。 1262

Python项目-Day17-异常处理-正则表达式

Python项目-Day17-异常处理-正则表达式 异常处理 用来处理程序执行过程中可能出现的导致程序无法正常执行的问题 异常的分类: 程序遇到逻辑或算法错误 运行过程中计算机错误:内存不够或者io错误 异常的步骤: 异常产生,检查到错误且解释器认为是异常,抛出异常 异常处理的格式: try 语句 except Exception as ex: print(ex) e...

qq_37892223的博客 490

YOLO26改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLO26-L !!! 最新的发文热点

Vision Clue Merge模块在Mamba - YOLO模型中同样重要,主要负责在模型的下采样过程中处理特征图,为后续的特征融合和目标检测任务提供更有效的信息。

Limiiiing的博客 472

【自动化运维】Python异常处理与程序调试

异常处理是程序用于处理以外情况的代码段,而在代码编写的过程中,经常要进行代码的调试和测试工作。本章将介绍 Python 语言中的异常处理和程序调试的具体使用方法。

weixin_73059729的博客 1189

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python异常处理和错误调试:解释Python中的异常处理机制

异常处理是一种在程序执行过程中捕获和处理错误的机制。在Python中,异常是指在程序运行期间发生的错误或异常情况,如除零错误、索引错误、类型错误等。异常处理机制允许我们捕获并处理这些异常,以避免程序崩溃并提供错误处理和恢复的机会。在Python中,异常处理使用`try-except`语句块来实现。`try`块包含可能引发异常的代码,而`except`块用于捕获和处理异常。在上面的示例中,`try`块中的代码会引发`ZeroDivisionError`异常,然后被`except`块捕获。

qq_41314882的博客 258

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python 异常处理及程序调试详解

Python异常处理及程序调试详解

燕鹏 1009

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

12、Python 异常处理与调试技巧

本文将系统讲解Python异常处理与调试的核心技术,涵盖从基础语法到生产级调试的完整知识体系,通过20+个代码示例揭示异常处理的深层逻辑,并提供可运行于PyCharm/VSCode的完整代码段。

朗朗的博客 1367

Python异常处理与调试

Python的异常处理和调试是开发过程中不可或缺的环节。异常处理可以帮助我们捕获和处理程序中的错误,而调试则可以帮助我们定位和修复这些错误。Python调试通常涉及到使用一些专门的工具和技巧,这些工具和技巧可以帮助你理解程序在运行时的状态。关键字来进一步增强异常处理能力。例如,无论是否发生异常,你都可以在。等,这些都可以用于捕获和处理异常。异常处理结构通常使用。Python提供了几种内置的异常类,如。关键字则可以用来手动抛出异常。此外,Python还提供了。块中执行一些清理操作。

sa10027的博客 458

Python中的异常处理与调试技巧

异常(Exception)是程序运行过程中发生的错误或异常情况,它会打断程序的正常流程。Python中的异常可以是语法错误(如拼写错误),也可以是运行时错误(如除零错误)。异常处理和调试是Python编程中不可或缺的技能。通过合理使用try-except语句、掌握调试技巧,并借助IDE和日志等工具,你可以更加高效地识别并解决代码中的问题,编写出更加健壮和可靠的程序。希望本文对你有所帮助,祝你在Python编程的道路上越走越远!

得塔云的博客 815

暑假Python基础整理 --异常处理及程序调试

本文介绍了Python中的异常处理与程序调试方法。首先列举了常见异常类型如NameError、IndexError等及描述。重点讲解了异常处理语句:try-except用于捕获处理异常,可组合else和finally语句;raise用于主动抛出异常。在程序调试部分,详细说明了使用IDLE调试器的步骤,包括断点设置、变量查看和调试按钮功能。还介绍了assert语句的条件验证调试方法。这些技巧能帮助开发者有效定位和处理程序错误,提高代码质量。

2401_86544210的博客 700

Python调试与异常处理的艺术

本文系统梳理 Python 调试与异常处理的实战方法,从精准异常捕获与异常链、顶层守护到语义化自定义异常,配合 print/assert 土法调试与 logging 进阶配置,覆盖并发场景的错误传播与重试策略,并给出可落地的代码示例与最佳实践清单,帮助你构建可维护、可定位、可恢复的高质量代码。

需要远程指导仿真实验、代码有问题的,请后台私信。 914

【Python】异常处理及程序调试

assert语句的作用是:当条件表达式的值为真时,该语句什么也不做,程序正常运行,反之,若值为假,则assert会抛出AssertionError异常。在运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”。其中,一部分“异常”是由开发者直接输入导致,这类错误多数产生的是SyntaxError:invalid syntax(无效的语法),这将直接导致程序无法运行。②从IDLE Shell中打开想要调试的.py的文件,选中某行,右键设置断点。通常情况下,assert语句可以和try…

2401_86008949的博客 934
上一篇: python实现各种常见的算法
下一篇: 银行系统(python基础实现)
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值