当前位置: 首页 > news >正文

第8篇:从入门到精通:掌握Python异常处理

第8篇:异常处理

内容简介

本篇文章将深入探讨Python中的异常处理机制。您将学习异常的基本概念与类型,掌握使用try-except块处理异常的方法,了解finally语句的作用,以及如何抛出和定义自定义异常。通过丰富的代码示例,您将能够有效地管理程序中的错误,提高代码的健壮性和可维护性。


目录

  1. 异常处理概述
    • 什么是异常
    • 异常的类型
    • 异常处理的重要性
  2. 使用try-except块处理异常
    • try-except语法结构
    • 捕获多个异常
    • 获取异常信息
  3. finally语句
    • finally的作用
    • 结合try-except-finally使用
  4. 抛出自定义异常
    • 定义自定义异常类
    • 抛出自定义异常
    • 捕获自定义异常
  5. 示例代码
    • 基本异常处理示例
    • 捕获多个异常示例
    • finally语句示例
    • 自定义异常示例
  6. 常见问题及解决方法
    • 问题1:如何捕获所有类型的异常?
    • 问题2:except块中不指定异常类型有什么风险?
    • 问题3:什么时候应该使用finally块?
    • 问题4:如何创建和使用自定义异常?
  7. 总结

异常处理概述

什么是异常

**异常(Exception)**是程序在运行过程中发生的错误事件。异常通常会导致程序的正常流程中断,除非被适当处理。Python通过异常处理机制,使程序能够在遇到错误时采取适当的措施,而不是直接崩溃。

异常的类型

Python内置了多种异常类型,常见的包括:

  • SyntaxError:语法错误。
  • TypeError:操作或函数应用于错误类型的对象。
  • ValueError:函数接收到正确类型但不合适的值。
  • IndexError:序列中使用了无效的索引。
  • KeyError:字典中使用了不存在的键。
  • ZeroDivisionError:除以零错误。
  • IOError:输入/输出操作失败。
  • ImportError:导入模块失败。

此外,用户可以根据需要定义自定义异常。

异常处理的重要性

  • 提高程序健壮性:通过捕获和处理异常,防止程序因错误而崩溃。
  • 增强用户体验:向用户提供友好的错误信息,而不是程序直接中断。
  • 便于调试:有助于定位和修复程序中的错误。
  • 资源管理:确保资源(如文件、网络连接等)在异常发生时得到正确释放。

使用try-except块处理异常

try-except语法结构

在Python中,使用try-except块来捕获和处理异常。基本语法如下:

try:# 可能引发异常的代码pass
except ExceptionType:# 处理特定类型异常的代码pass

捕获多个异常

可以在同一个except块中捕获多个异常,或者为不同异常类型定义多个except块。

示例1:同一个except块捕获多个异常

try:# 可能引发异常的代码pass
except (TypeError, ValueError):# 处理TypeError和ValueErrorpass

示例2:为不同异常类型定义多个except

try:# 可能引发异常的代码pass
except TypeError:# 处理TypeErrorpass
except ValueError:# 处理ValueErrorpass

获取异常信息

可以使用as关键字获取异常的详细信息,便于调试和日志记录。

示例

try:result = 10 / 0
except ZeroDivisionError as e:print(f"发生错误:{e}")

finally语句

finally的作用

finally块中的代码无论是否发生异常,都会被执行。它通常用于执行清理操作,如关闭文件、释放资源等。

结合try-except-finally使用

示例

try:f = open("data.txt", "r")data = f.read()
except FileNotFoundError as e:print(f"文件未找到:{e}")
finally:if 'f' in locals():f.close()print("文件已关闭。")

抛出自定义异常

定义自定义异常类

自定义异常类通常继承自内置的Exception类或其子类。

示例

class MyCustomError(Exception):"""自定义异常类"""pass

抛出自定义异常

使用raise关键字可以抛出自定义异常。

示例

def check_value(x):if x < 0:raise MyCustomError("x不能为负数。")

捕获自定义异常

可以在except块中指定自定义异常类型进行捕获和处理。

示例

try:check_value(-1)
except MyCustomError as e:print(f"捕获到自定义异常:{e}")

示例代码

基本异常处理示例

以下示例展示了如何使用try-except块捕获并处理除零错误。

def divide(a, b):try:result = a / bexcept ZeroDivisionError:print("错误:除数不能为零。")else:print(f"结果是 {result}")finally:print("执行结束。")# 调用函数
divide(10, 2)
# 输出:
# 结果是 5.0
# 执行结束。divide(10, 0)
# 输出:
# 错误:除数不能为零。
# 执行结束。

捕获多个异常示例

以下示例展示了如何捕获多个异常类型。

def process_data(data):try:# 假设data应该是一个整数result = 10 / dataexcept (TypeError, ZeroDivisionError) as e:print(f"发生异常:{e}")else:print(f"处理结果是 {result}")# 调用函数
process_data(2)    # 输出: 处理结果是 5.0
process_data(0)    # 输出: 发生异常:division by zero
process_data("a")  # 输出: 发生异常:unsupported operand type(s) for /: 'int' and 'str'

finally语句示例

以下示例展示了如何使用finally块确保资源被释放。

def read_file(filename):try:f = open(filename, "r")content = f.read()except FileNotFoundError as e:print(f"错误:{e}")else:print(content)finally:try:f.close()print("文件已关闭。")except NameError:print("文件未打开,无需关闭。")# 调用函数
read_file("existing_file.txt")
# 输出:
# ...文件内容...
# 文件已关闭。read_file("nonexistent_file.txt")
# 输出:
# 错误:[Errno 2] No such file or directory: 'nonexistent_file.txt'
# 文件未打开,无需关闭。

自定义异常示例

以下示例展示了如何定义、抛出和捕获自定义异常。

class NegativeValueError(Exception):"""自定义异常:负值错误"""passdef calculate_square_root(x):if x < 0:raise NegativeValueError("无法计算负数的平方根。")return x ** 0.5try:print(calculate_square_root(16))  # 输出: 4.0print(calculate_square_root(-4))  # 抛出自定义异常
except NegativeValueError as e:print(f"捕获到自定义异常:{e}")

输出:

4.0
捕获到自定义异常:无法计算负数的平方根。

常见问题及解决方法

问题1:如何捕获所有类型的异常?

原因:在某些情况下,您可能需要捕获所有可能的异常,以防止程序因未处理的错误而崩溃。

解决方法

使用不指定异常类型的except块来捕获所有异常。但需谨慎使用,以避免隐藏潜在的问题。

示例

try:# 可能引发异常的代码pass
except Exception as e:print(f"发生异常:{e}")

注意事项

  • 尽量避免捕获所有异常,除非确实有必要。
  • 确保在捕获所有异常后,能够适当地处理或记录异常信息。

问题2:except块中不指定异常类型有什么风险?

原因:不指定异常类型会导致所有异常都被捕获,包括系统退出异常(如SystemExitKeyboardInterrupt等),可能会掩盖程序中的实际错误。

解决方法

  • 明确指定需要捕获的异常类型。
  • 使用多重except块分别处理不同类型的异常。
  • 保留对关键异常的默认处理,如KeyboardInterrupt

示例

try:# 可能引发异常的代码pass
except ZeroDivisionError:print("捕获到除零错误。")
except TypeError:print("捕获到类型错误。")
except Exception as e:print(f"捕获到其他异常:{e}")

问题3:什么时候应该使用finally块?

原因:当需要确保某些代码在异常发生与否时都被执行,如释放资源、关闭文件或网络连接时。

解决方法

在需要执行清理操作的try块中,使用finally块来放置这些操作。

示例

try:f = open("data.txt", "r")data = f.read()
except FileNotFoundError:print("文件未找到。")
finally:if 'f' in locals():f.close()print("文件已关闭。")

问题4:如何创建和使用自定义异常?

原因:有时内置异常类型无法准确描述特定的错误情况,需要创建自定义异常以提供更具体的错误信息。

解决方法

  1. 定义自定义异常类:继承自内置的Exception类或其子类。
  2. 抛出自定义异常:在适当的位置使用raise语句抛出自定义异常。
  3. 捕获自定义异常:在except块中指定自定义异常类型进行捕获和处理。

示例

class InsufficientFundsError(Exception):"""自定义异常:资金不足"""passclass BankAccount:def __init__(self, balance=0):self.balance = balancedef withdraw(self, amount):if amount > self.balance:raise InsufficientFundsError("余额不足,无法提款。")self.balance -= amountprint(f"成功提款{amount}元。当前余额:{self.balance}元。")# 使用示例
account = BankAccount(100)try:account.withdraw(150)
except InsufficientFundsError as e:print(f"异常:{e}")

输出:

异常:余额不足,无法提款。

总结

在本篇文章中,我们深入探讨了Python中的异常处理机制。通过理解异常的基本概念与类型,学习如何使用try-except块捕获和处理异常,掌握finally语句的应用,以及如何创建和使用自定义异常,您已经掌握了有效管理程序错误的核心技巧。异常处理不仅能提高代码的健壮性和用户体验,还能使您的程序在面对意外情况时更加稳定和可靠。

学习建议

  1. 实践异常处理项目:通过实际项目,如文件处理、网络请求等,巩固所学知识。
  2. 深入学习异常链与上下文:了解异常的链式处理和上下文管理,提升异常处理的灵活性。
  3. 优化代码设计:结合异常处理与设计模式(如策略模式、责任链模式),提高代码的健壮性和可维护性。
  4. 编写文档与测试:为异常处理逻辑编写清晰的文档和单元测试,确保代码的可靠性。
  5. 参与社区与开源项目:通过参与开源项目,学习他人的异常处理实践,提升编程能力。
  6. 阅读相关书籍和文档:如《Python编程:从入门到实践》、《Fluent Python》,系统性地提升Python编程技能。

如果您有任何问题或需要进一步的帮助,请随时在评论区留言或联系相关技术社区。

相关文章:

第8篇:从入门到精通:掌握Python异常处理

第8篇&#xff1a;异常处理 内容简介 本篇文章将深入探讨Python中的异常处理机制。您将学习异常的基本概念与类型&#xff0c;掌握使用try-except块处理异常的方法&#xff0c;了解finally语句的作用&#xff0c;以及如何抛出和定义自定义异常。通过丰富的代码示例&#xff0…...

聚铭网络6款产品入选CCIA《网络安全专用产品指南》

近日&#xff0c;中国网络安全产业联盟CCIA正式发布《网络安全专用产品指南》&#xff08;第二版&#xff09;&#xff08;以下简称《指南》&#xff09;。聚铭网络凭借突出技术优势、创新能力以及市场积累&#xff0c;旗下安全产品成功入选防火墙、网络安全审计、日志分析、网…...

高等数学学习笔记 ☞ 不定积分的积分方法

1. 第一换元积分法 1. 基础概念&#xff1a;形如的过程&#xff0c;称为第一换元积分法。 2. 核心思想&#xff1a;通过对被积函数的观察(把被积函数的形式与积分表的积分公式进行比较)&#xff0c;把外部的部分项拿到的内部(求原函数)&#xff0c; 然后进行拼凑&#xff0c;…...

08、如何预防SQL注入

目录 1、分析及其存在哪些危险 2、预防SQL注入 1、分析及其存在哪些危险 原理: SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 语句,利用程序对用户输入处理不当的漏洞,使恶意 SQL 语句被数据库服务器执行。 通常发生在应用程序将用户输入直接拼…...

如何发布自己的第一个Chrome扩展程序

如何发布自己的Chrome扩展程序 只需要六步即可完成Chrome扩展程序的发布 &#xff08;1&#xff09;首先打开google chrome 应用商城注册开发者账号的页面 &#xff08;2&#xff09;现在进行一个绑卡支付5美元的一次性注册费用即可。【不知道如何绑卡的支付的&#xff0c;文…...

ubuntu开机自启,其他方式

在 Ubuntu 22.04 中&#xff0c;如果不使用 .service 文件&#xff0c;仍然有其他方法可以让某个 .sh 文件随着系统启动而自动运行。以下是几种替代方法&#xff1a; 方法一&#xff1a;使用 crontab 的 reboot 选项 crontab 是 Linux 中用于设置周期性被执行的任务的工具。通…...

容器渗透横向

本质上要获得 1.获得容器IP段 2.获得主机IP段 3.获得本机IP 4.通过CNI或Docker0等扫描本机端口 Flannel 容器信息 rootubuntu-linux-22-04-desktop:/home/parallels/Desktop# k get po -A -o wide NAMESPACE NAME …...

软件测试—接口测试面试题及jmeter面试题

一&#xff0c;接口面试题 1.接口的作用 实现前后端的交互&#xff0c;实现数据的传输 2.什么是接口测试 接口测试就是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换、传递和控制管理过程&#xff0c;以及相互逻辑关系 3.接口测试必要性 1.可以发现很…...

ansible之playbook剧本

Playbook 1.playbook的组成部分 开头 用 --- 表示&#xff0c;表示是一个yaml文件&#xff0c;但是可以忽略不写 Tasks&#xff08;任务&#xff09; 包含了在目标主机上执行的操作&#xff0c;操作还是由模板来执行。每一个任务都是一个ansible的模块&#xff0c;调用系统命…...

基于 Python 的财经数据接口库:AKShare

AKShare 是基于 Python 的财经数据接口库&#xff0c;目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具&#xff0c;主要用于学术研究目的。 安装 安装手册见…...

强网杯RS加密签名伪造及PyramidWeb利用栈帧打内存马

RS加密签名伪造及PyramidWeb利用栈帧打内存马 今年强网杯的一个新框架源代码如下 from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.events import NewResponse from pyramid.response import Response import utiluser…...

Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)

我是一个计算机专业研0的学生卡蒙Camel&#x1f42b;&#x1f42b;&#x1f42b;&#xff08;刚保研&#xff09; 记录每天学习过程&#xff08;主要学习Java、python、人工智能&#xff09;&#xff0c;总结知识点&#xff08;内容来自&#xff1a;自我总结网上借鉴&#xff0…...

搭建Node.js后端

从头开始搭建一个Node.js后端&#xff0c;并实现查询历史数据的功能&#xff0c;下面是详细的步骤说明&#xff0c;包括环境配置、项目初始化、代码编写、以及服务器启动。 1. 环境配置 1.1 安装 Node.js 和 npm 首先&#xff0c;你需要在你的电脑上安装 Node.js 和 npm&…...

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置&#xff0c;这篇就让这两个模块绑定起来&#xff0c;绑定的原因是&#xff0c;Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定&#xff0c;其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…...

vue编写一个可拖动的模块,并可以和任何其他组件组合使用

实现思路&#xff1a; 使用 Vue 的自定义指令&#xff08;directive&#xff09;来处理拖动逻辑。在 mounted 钩子中添加鼠标事件监听器&#xff0c;以实现拖动功能。在 unmounted 钩子中移除鼠标事件监听器&#xff0c;防止内存泄漏。 代码示例&#xff1a; <template&g…...

Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端

文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理&#xff08;1&#xff09;为RestClient&#xff08;2&#xff09;为WebClient&#xff08;3&#xff09;为RestTemplate 注意 一、概述 官方文档…...

【蓝桥杯】Python算法——求逆元的两种算法

目录 零、前言一、逆元二、扩展欧几里得算法三、费马小定理四、总结 零、前言 距离25年蓝桥杯还有大概三个月时间&#xff0c;接下来重点应该会放在蓝桥杯备考方向&#xff0c;一起努力&#xff0c;一起加油 一、逆元 什么是逆元&#xff1f;这是数论中的一个基本概念。如果存…...

音频语言模型与多模态体系结构

音频语言模型与多模态体系结构 多模态模型正在创造语言、视觉和语音等以前独立的研究领域的协同效应。这些模型使用通用架构,将每种模式视为不同的“token”,使它们能够以一种与人类认知非常相似的方式联合建模和理解世界。 ​ ​可以将多模态分为两个主要领域:输入空间(…...

Redis的安装和配置、基本命令

一、实验目的 本实验旨在帮助学生熟悉Redis的安装、配置和基本使用&#xff0c;包括启动Redis服务、使用命令行客户端进行操作、配置Redis、进行多数据库操作以及掌握键值相关和服务器相关的命令。 二、实验环境准备 1. JAVA环境准备&#xff1a;确保Java Development Kit …...

2025.1.17——三、SQLi regexp正则表达式|

题目来源&#xff1a;buuctf [NCTF2019]SQLi1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;正常注入 step 2&#xff1a;弄清关键字黑名单 1.目录扫描 2.bp爆破 step 3&#xff1a;根据过滤名单构造payload step 4&#xff1a;regexp正则注…...

flutter 常用UI组件

文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…...

基于微信小程序的健身房预约管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关&#xff08;RD Gateway&#xff09;中的一个重大漏洞&#xff0c;该漏洞可能允许攻击者利用竞争条件&#xff0c;导致拒绝服务&#xff08;DoS&#xff09;攻击。该漏洞被标识为CVE-2025-21225&#xff0c;已在2025年1月的补丁星期二更新中得到…...

如何学习Transformer架构

Transformer架构自提出以来&#xff0c;在自然语言处理领域引发了革命性的变化。作为一种基于注意力机制的模型&#xff0c;Transformer解决了传统序列模型在并行化和长距离依赖方面的局限性。本文将探讨Transformer论文《Attention is All You Need》与Hugging Face Transform…...

RPA赋能内容创作:打造小红书入门词语图片的全自动化流程

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 用RPA全自动化批量生产【入门词语】图片做小红书商单&#xff0c;保姆级工具开发教程 最近由…...

Quantum supremacy using a programmable superconducting processor 全文翻译,配公式和图

2019年&#xff0c;谷歌的量子霸权文章&#xff0c; 原文链接&#xff1a; https://www.nature.com/articles/s41586-019-1666-5 第一稿&#xff0c;公式和视图后续再加 。。。 Quantum supremacy using a programmable superconducting processor 使用可编程超导处理器的量…...

Jupyter notebook中运行dos指令运行方法

Jupyter notebook中运行dos指令运行方法 目录 Jupyter notebook中运行dos指令运行方法一、DOS(磁盘操作系统&#xff09;指令介绍1.1 DOS介绍1.2 DOS指令1.2.1 DIR - 显示当前目录下的文件和子目录列表。1.2.2 CD 或 CHDIR - 改变当前目录1.2.3 使用 CD .. 可以返回上一级目录1…...

个人vue3-学习笔记

声明:这只是我个人的学习笔记(黑马),供以后复习用 。一天学一点,随时学随时更新。明天会更好的! 这里只给代码,不给运行结果,看不出来代码的作用我也该进厂了。。。。。 Day1 使用create-vue创建项目。 1.检查版本。 node -v 2.创建项目 npm init vue@latest 可…...

Ubuntu安装搜狗输入法

Ubuntu安装搜狗输入法 官网完整安装步骤调整默认输入法 官网 搜狗输入法 - 官网&#xff1a;https://shurufa.sogou.com/ 搜狗输入法Linux版 - 首页&#xff1a;https://shurufa.sogou.com/linux 搜狗输入法Linux版 - 安装指南&#xff1a;https://shurufa.sogou.com/linux/gu…...

【C】链表算法题2 -- 反转链表

leetcode链接https://leetcode.cn/problems/reverse-linked-list/description/https://leetcode.cn/problems/reverse-linked-list/description/https://leetcode.cn/problems/reverse-linked-list/description/https://leetcode.cn/problems/reverse-linked-list/description/…...

1.7 ChatGPT:引领AI对话革命的致胜之道

ChatGPT:引领AI对话革命的致胜之道 随着人工智能(AI)技术的迅猛发展,特别是在自然语言处理(NLP)领域,OpenAI 的 ChatGPT 已经成为了举世瞩目的技术突破。从普通的自动化客服到深入的创作与协作,ChatGPT 通过其卓越的语言理解和生成能力,改变了人们与计算机交互的方式…...

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题&#xff1a;当设置dialog中有el-table时&#xff0c;并设置el-table区域的滚动&#xff0c;看到el-table中多了一条横线&#xff1b; 原因&#xff1a;el-table有一个before的伪元素作为表格的下边框下&#xff0c;初始的时候已设置&#xff0c;在滚动的时候并没有重新设置…...

如何使用 useMemo 和 memo 优化 React 应用性能?

使用 useMemo 和 memo 优化 React 应用性能 在构建复杂的 React 应用时&#xff0c;性能优化是确保应用流畅运行的关键。React 提供了多种工具来帮助开发者优化组件的渲染和计算逻辑&#xff0c;其中 useMemo 和 memo 是两个非常有用的 Hook。本文将详细介绍这两个工具的使用方…...

turtle教学课程课堂学习考试在线网站

完整源码项目包获取→点击文章末尾名片&#xff01;...

spark任务优化参数整理

以下参数中有sql字眼的一般只有spark-sql模块生效&#xff0c;如果你看过spark的源码&#xff0c;你会发现sql模块是在core模块上硬生生干了一层&#xff0c;所以反过来spark-sql可以复用core模块的配置&#xff0c;例外的时候会另行说明&#xff0c;此外由于总结这些参数是在不…...

TCP TIME-WAIT 状态为什么要坚持 2MSL

经常有人问这个问题&#xff0c;这种问题问我就对了。我准备了下面的一幅时序图来解释这个问题&#xff1a; 简单点说就是两个目的&#xff1a; 正常处理被动关闭方的重传 FIN&#xff1b;确保当前连接的所有报文全部消失。 也就是说&#xff0c;无论任何情况下&#xff0c;…...

如何在Ubuntu上安装Cmake

前言 ​ 本文主要阐述如何在Ubuntu22.04上面安装cmake&#xff0c;具体可看下面的操作。 正文 一、环境 Ubuntu22.04 cmake-3.31.4.tar.gz 二、步骤 参考这个方案&#xff1a; 【运维】Ubuntu如何安装最新版本的Cmake&#xff0c;编译安装Cmake&#xff0c;直接命令安装…...

1.17学习

crypto nssctf-[SWPUCTF 2021 新生赛]crypto8 不太认识这是什么编码&#xff0c;搜索一下发现是一个UUENCODE编码&#xff0c;用在线工具UUENCODE解码计算器—LZL在线工具解码就好 misc buuctf-文件中的秘密 下载附件打开后发现是一个图片&#xff0c;应该是一个图片隐写&…...

力扣 搜索二维矩阵

二分查找&#xff0c;闭区间与开区间的不同解法。 题目 乍一看&#xff0c;不是遍历一下找到元素就可以了。 class Solution {public boolean searchMatrix(int[][] matrix, int target) {for (int[] ints : matrix) {for (int ans : ints) {if (ans target) return true;}}…...

RabbitMQ基础篇

文章目录 1 RabbitMQ概述1.1 消息队列1.2 RabbitMQ体系结构 2 RabbitMQ工作模式2.1 简单模式&#xff08;Simple Queue&#xff09;2.2 工作队列模式&#xff08;Work Queues&#xff09;2.3 发布/订阅模式&#xff08;Publish/Subscribe&#xff09;2.4 路由模式&#xff08;R…...

【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目

解决idea至少创建jdk17项目 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗?解决 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗 我本来以为是 IDEA 版本更新导致的 Bug&#xff0c;开始还没在意。 直到我今天自己初始化项目时才发现&am…...

[BrainShadow-V1] VR头戴设备统计报告

Brain-Shadow-V1 EventVR headsetsReported byXiao enDate2025/01/15Version1.0 HTC Vive Pro 2 Pro HTC Vive Pro 2 是一款高端虚拟现实头显&#xff0c;配备双 2.5K 显示屏&#xff0c;组合分辨率达到 48962448&#xff0c;提供 120 的视场角和 120Hz 的刷新率。该设备支持…...

RK3568 Android11 锁屏界面屏蔽下拉状态栏

参考文章&#xff1a; Android R锁屏界面屏蔽下拉状态栏_pulseexpansionhandler-CSDN博客 前提增加状态栏控制显隐属性&#xff0c;以下面文章为前提补充功能 RK3568 Android11 状态栏和导航栏增加显示控制功能-CSDN博客 修改文件位置&#xff1a; frameworks/base/package…...

53,【3】BUUCTF WEB october 2019 Twice SQLinjection

题目得到信息&#xff0c;2次注入&#xff0c;进入靶场 登录页面&#xff0c;很自然想到SQL 第一次注入应该是这个可以登录&#xff0c;注册&#xff0c;提交简介的页面 第二次注入应该是在info处注入&#xff0c;信息显示在简介处 我真的纯脑子有病&#xff0c;人家二次注入不…...

利用硬盘虚拟内存解决华为手机模拟器运行内存不足问题

在进行鸿蒙开发时&#xff0c;华为手机模拟器是必不可少的工具。然而&#xff0c;对于只有 8GB 物理内存的电脑来说&#xff0c;运行模拟器可能会遇到 "系统内存不足" 的提示&#xff0c;导致模拟器无法正常启动。这时&#xff0c;我们可以通过硬盘虚拟出额外的内存来…...

探秘Shortest与Stagehand:开启高效测试与自动化新篇

探秘Shortest与Stagehand&#xff1a;开启高效测试与自动化新篇 在数字化浪潮的推动下&#xff0c;网页自动化工具如同繁星般涌现&#xff0c;为众多行业带来了效率的变革。在这些工具中&#xff0c;Shortest和Stagehand凭借其出色的表现&#xff0c;成为了众多开发者、测试人…...

网络安全构成要素

一、防火墙 组织机构内部的网络与互联网相连时&#xff0c;为了避免域内受到非法访问的威胁&#xff0c;往往会设置防火墙。 使用NAT&#xff08;NAPT&#xff09;的情况下&#xff0c;由于限定了可以从外部访问的地址&#xff0c;因此也能起到防火墙的作用。 二、IDS入侵检…...

家政服务小程序,打造智慧家政新体验

春节即将来临&#xff0c;家政市场呈现出了火热的场景&#xff0c;大众对家政服务的需求持续增加。 近年来&#xff0c;家政市场开始倾向数字化、智能化&#xff0c;借助科学技术打造家政数字化平台&#xff0c;让大众在手机上就可以预约家政服务&#xff0c;减少传统家政市场…...

2.使用Spring BootSpring AI快速构建AI应用程序

Spring AI 是基于 Spring Boot3.x 框架构建&#xff0c;Spring Boot官方提供了非常便捷的工具Spring Initializr帮助开发者快速的搭建Spring Boot应用程序,IDEA也集成了此工具。本文使用的开发工具IDEASpring Boot 3.4Spring AI 1.0.0-SNAPSHOTMaven。 1.创建Spring Boot项目 …...

OpenCV实战-全景图像拼接

代码地址见文末 实现效果 1. 项目背景 随着计算机视觉技术的不断发展&#xff0c;图像拼接技术已被广泛应用于虚拟现实、地图生成、全景摄影等领域。图像拼接&#xff08;Image Stitching&#xff09;旨在将多张部分重叠的图像无缝拼接成一幅完整的全景图像。此任务要求图像处…...