Python基础:错误与异常

news2024/12/23 8:55:17

文章目录

  • 错误和异常
    • 程序错误
    • 异常处理
    • 断言处理
    • 程序调试

错误和异常

程序错误

程序的错误

​ python程序中错误通常分为3种类型,即语法错误运行错误逻辑错误

  • 语法错误:源代码中的拼写语法错误,这些错误导致Python编译器无法把Python源代码转换为字节码,也称编译错误。包含语法错误时,编译器显示SyntaxError错误信息。
  • 运行错误:python程序的运行时错误是在解释执行过程中产生的错误,例如程序没有导入random模块,解释器将在运行时抛出NameError错误信息。
  • 逻辑错误:Python程序的逻辑错误时程序可以执行,但是执行结果不正确。对于逻辑错误,解释器无能为力,需要用户自己调试判断。

异常处理

​ python语言采取结构化的异常处理机制。在程序运行过程中,如果产生错误,将抛出异常;通过try语句来定义代码块,以运行可能抛出的异常的代码,通过except语句可以捕获特点的异常并执行相应处理,通过finally语句可以保证即使产生异常(处理失败),也可以在事后清理资源。

内置异常类

异常

​ 在程序运行时,如果出现错误,Python解释器会创建一个异常对象,并抛出给系统运行时。即程序终止正常执行流程,转而执行异常处理流程。

​ 在某种特殊条件下,代码中也可以创建一个异常对象,并通过raise语句抛出给系统运行时。

​ 异常对象是异常类的对象实例。Python异常类均派生于BaseException。

引发异常

​ 大部分由程序错误而产生的错误和异常一般由Python虚拟机自动抛出。另外在程序中如果判断某种错误情况,可以创建相应异常类的对象,并通过raise语句抛出。

# Python虚拟机自动抛出异常
1 / 0# ZeroDivisionError: division by zero

# 通过raise语句抛出异常示例
a = -1
if a < 0: raise ValueError("数值不能为负数")# ValueError: 数值不能为负数

使用try…except…else…finally语句捕获异常
异常处理

自定义异常类

​ 虽然Python库中提供了许多异常,但在应用程序开发过程中,有时候需要定义特定于应用程序的异常类,表示应用程序的一些错误类型。

自定义异常类一般继承与Exception或其子类。自定义异常类的名称一般以Error或Exception为后缀

class NumberError(Exception): # 自定义异常类继承于Exception
        def __init__(self, data):
            Exception.__init__(self, data)
            self.data = data
        def __str__(self): # 重载__str__()方法
            return self.data + ':非法数值(<0)'
def total(data):
    total = 0
    for i in data:
        if i < 0:raise NumberError(str(i))
        total += i
    return total
data1 = (44, 78, 90, 80, 55)
data2 = (44, 78, 90, -80, 55)
print(total(data1))
# 347
print(total(data2))
# NumberError: -80:非法数值(<0)

断言处理

​ 用户在编写程序时,在调试阶段往往需要判断代码执行过程中变量的值等信息(例如对象是否为空,数值是否为0等)

​ 用户可以使用print()函数打印输出结果,也可以通过断点跟踪调试查看变量,但使用断言更加灵活高效。

一般用于下列情况:

  1. 前置条件断言:代码执行之前必须具备的特性
  2. 后置条件断言:代码执行之后必须具备的特性
  3. 前后不变断言:代码执行前后不能变化的特性

​ 断言主要功能是帮助程序员调试程序,以保证程序运行的正确性,断言一般在开发调试阶段使用,即在调试模式时断言有效,在优化模式运行时自动忽略断言。

assert语句和AssertionError类

使用关键字assert可以声明断言

assert<布尔表达式> # 简单形式

assert<布尔表达式>, <字符串表达式> # 带参数的形式

  • <字符串表达式>是断言失败时输出的失败消息

  • 如果断言成功则不报错,断言失败则导致AssertionError

a = 5
assert a == 10
#output:
#AssertionError:
a = 5
assert a == 10, "a的值不等于10"
#output:
#AssertionError: a的值不等于10

Python解释器有两种运行模式,即调试模式和优化模式。通常为调试模式,内置只读变量__debug__为True;当选项-O运行时(即python.exe -O)为优化模式,此时内置只读变量__debug__为False。故两种形式的assert语句相当于:

if __debug__:
    if not testexpression: raise AssertionError
if __debug__:
    if not testexpression: raise AssertionError(data)

程序调试

在程序实际运行之前,查找和修正其错误的过程称为调试(debugging)。

测试模块

1.安装pytest或ipytest(用于jupyter notebook)

pip install pytest

2.pytest是Python中非常流行的测试框架之一,它使得编写和运行测试变得非常简单。
3.简单DEMO(ipytest)

导入ipytest库,ipytest.autoconfig() 是 ipytest 模块的一个函数,用于自动配置 ipytest 以在 Jupyter Notebook 中运行。

import ipytest
ipytest.autoconfig()
  > 首先编写了一个过滤参数列表中能被5整除的函数
  ```python
def get_divisible_by_five(numbers):
    """Returns a list of numbers which are divisible by five in the list got as an argument"""
    result = []
    for num in numbers:
        if not num % 5:
            result.append(num)

    return result

编写一个测试用例测试get_divisible_by_five函数能否正常工作

%%ipytest
#%%ipytest是一个Jupyter Notebook的魔法命令,它表明这个cell中的代码应该由ipytest模块来运行。

def test_get_divisible_by_five():#Python解释器或自动识别test_开头的函数作为测试
    assert get_divisible_by_five([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) == [5, 10]

如果测试成功
在这里插入图片描述> 如果测试失败
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

处理 git仓库提交大小写不识别的问题

源码 echo off title Handle name capitalization git config core.ignorecase false echo.&pause新建一个文本改名 处理资源大小写不识别问题.bat 以文编编辑器打开赋值粘贴上面的代码 丢到你的git仓库根目录 双击运行就可以了

知行之桥EDI系统QA第三期:启动知行之桥专题

随着使用知行之桥EDI系统的用户群体日益壮大&#xff0c;在使用过程中&#xff0c;用户可能对系统的工作原理、功能模块和实施过程有一些疑问。近期整理了有关启动知行之桥EDI系统时&#xff0c;常见的几个问题&#xff1a; 一、启动知行之桥服务报错&#xff1a;Failed to st…

王海峰最新发声!

7月6日&#xff0c;2023世界人工智能大会&#xff08;WAIC&#xff09;在上海世博中心开幕&#xff0c;众多专家学者、科技领军人才、企业代表共同探讨人工智能赋能产业发展的全新变化&#xff0c;展望技术新趋势。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海…

无法应付大文件、海量文件可靠传输的FTP,用什么替代?

FTP作为世界第一款文件传输协议&#xff0c;在很长时间内&#xff0c;都广泛在世界范围内应用于各个行业和领域的文件传输&#xff0c;FTP解决了文件传输协议有无的问题&#xff0c;填补了互联网传输协议的空缺&#xff0c;极大程度改善了文件传输的困境。 但随着网络技术的发展…

HTTPS 的加密流程详解

HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式&#xff1a; 在通信建立前采用非对称加密的方式交换「会话秘钥」&#xff0c;后续就不再使用非对称加密。 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。 采用「混合加密」的方式的原因&#…

TiDB(3):TiDB安装部署

https://pingcap.com/docs-cn/stable/overview/#部署方式 1 部署方式选择 https://gitee.com/pingcap/tidb?_fromgitee_search 通过查阅官方文档和网友踩坑经验&#xff0c;建议自己测试的时候使用官网推荐的Docker Compose方式快速构建TiDB集群即可(或者使用单机版) 2 TiDB-L…

【PHP+VUE】手术麻醉临床信息管理系统源码

一、前言 手术麻醉信息系统将为医院手术室带来规范化的工作管理标准、实时快捷的信息流&#xff0c;医疗经验的积累和有效归纳, 全面解决了手术室麻醉过程管理的信息化和数字化。 能够规范手术室的工作流程&#xff0c;实现麻醉、手术过程中的信息数字化和网络化&#xff0c;…

基于Pytorch深度学习的脑肿瘤分类识别(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

第十四章 原理篇:DEIT

参考教程&#xff1a; https://arxiv.org/pdf/2012.12877.pdf https://github.com/facebookresearch/deit 文章目录 概述Knowledge DistillationDEITbase model: VITtransformer blockclass tokenposition embedding Distillation through attention 代码实现DistilledVisionTr…

Java Excel 打开文件报发现“xx.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复问题解决

问题描述&#xff1a; 发现“文件.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复&#xff1f; 问题分析&#xff1a; 1、后端的导出接口写的不对&#xff0c;又返回流数据&#xff0c;又返回响应体数据&#xff0c;导致前端将流数据和响应体数据都下载到了excel文件中。…

web开发应用技术论文范文

web开发技术论文篇一&#xff1a;《WEB开发基本技术实验项目设计》 摘 要&#xff1a;在众多企业开展电子商务的背景下&#xff0c;在管理信息系统网络化发展的趋势下&#xff0c;对经管专业学生阿来说了解并掌握web开发的基本技术知识是十分必要的&#xff0c;为此本文以黄梯云…

Nova: 基于committed relaxed R1CS的IVC方案

Nova是INV的一种实现方案&#xff0c;所谓IVC是指Prover可以向Verifier证明 z i F ( i ) ( z 0 ) z_i F^{(i)}(z_0) zi​F(i)(z0​) 。 最朴素的做法是直接进行i次迭代&#xff0c;每次迭代都进行一次zkSnark&#xff0c;但这样做有三个问题&#xff1a; Prover所需内存大…

软件安全测试流程与方法分享(中)

安全测试是在IT软件产品的生命周期中&#xff0c;特别是产品开发基本完成到发布阶段&#xff0c;对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。安全是软件产品的一个重要特性&#xff0c;安全测试也是软件测试重的一个重要类别&#xff0c;本系列文章我们与…

趁规则改变之前,转变思维

在职场和生活中&#xff0c;我们常常强调了解和遵守规则的重要性。无论从事哪个行业、从事何种工作&#xff0c;赚取收入都需要理解并适应游戏规则。然而&#xff0c;规则并非永远不变&#xff0c;它会随着竞争环境、市场条件甚至社会文化的变迁而发生变化。 举个例子&#xff…

LeetCode 打卡day57--动态规划之回文串问题

一个人的朝圣 — LeetCode打卡第57天 知识总结 Leetcode 647. 回文子串题目说明代码说明 Leetcode 5. 最长回文子串题目说明代码说明 Leetcode 516. 最长回文子序列题目说明代码说明 知识总结 今天是动态规划的回文串问题系列 Leetcode 647. 回文子串 题目链接 题目说明 给…

nginx四层转发应用

默认使用yum安装的nginx是没有额外安装的动态模块的&#xff0c;需要自己额外安装 ls /usr/lib64/nginx/modules/ 若是不安装stream模块&#xff0c;直接在nginx的配置文件中调用stream模块&#xff0c;重载配置文件的时候会报错识别不到stream功能 安装stream模块 yum insta…

网际奇缘:计算机网络演进、概念探秘与通信魔法!

文章目录 计算机网络概述1.1&#x1f341;&#x1f341;计算机网络的基本定义和基本功能1.2 &#x1fab6;&#x1fab6;计算机网络的演进过程1.2.1 &#x1f987;主机互联&#x1f987;1.2.2 &#x1f987;局域网&#x1f987;1.2.3 &#x1f987;互联网&#x1f987;1.2.4 &a…

测试编排必要性

目录 前言&#xff1a; 测试编排定义 测试编排和自动化 测试编排的好处 自动化的测试编排策略 自动化/编排工具 测试编排和CI/CD 学点啥 前言&#xff1a; 编排是一种组织和安排信息的过程&#xff0c;它在各种情境中都是非常重要的。在撰写文章、演讲或其他形式的表达…

学校公寓管理系统/基于微信小程序的学校公寓管理系统

摘 要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个学生的使用。手机具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要求的操作…

常用特殊函数的计算机处理

常用特殊函数的计算机处理 gamma 函数 契贝谢夫多项式 契贝谢夫多项式的展开系数 ja_j^{(10)}ja_j^{(10)}01.060.010973695810.42278433707-0.002466748020.411840251880.001539768130.08157821889-0.000344234240.0742379076100.00006771065-0.0002109075 Fortran 实现&…