075、Python 关于异常处理try-except语句的使用

在实际应用中,比如涉及文件读写、网络通信时,会因为文件不存在、权限不够、网络异常等原因引发异常,或者对数据库连接、查询、更新等操作,会因为连接超时、语法错误、唯一约束冲突等引发异常。

在Java或C#等语言中我们使用try-catch语句来捕捉异常,而在Python中,异常处理使用的是try-except语句。虽然使用不同关键字,但是应用思维大同小异。

下面详细看下Python中的try-except语句。

1、基本语法:

try:  # 尝试执行的代码块  # 这里放可能会引发异常的代码  
except ExceptionType1:  # 如果try块中的代码引发了ExceptionType1异常,则执行此块  # 处理ExceptionType1异常的代码  
except ExceptionType2:  # 如果try块中的代码引发了ExceptionType2异常,则执行此块  # 处理ExceptionType2异常的代码  
# ... 可以有多个except子句来处理不同类型的异常  
except Exception as e:  # 捕获所有未被特定except子句捕获的异常  # 处理异常的通用代码  print(f"An error occurred: {e}")  
else:  # 如果没有异常发生,则执行此块  # 通常用于执行依赖于try块成功执行的代码  print("No exception was raised")  
finally:  # 无论是否发生异常,都会执行此块  # 通常用于执行清理操作,如关闭文件或释放资源  print("This block will always be executed")

在上面的语法中:

  • try块包含可能会引发异常的代码。
  • except块用于捕获并处理特定的异常。可以有多个except子句,每个子句处理不同类型的异常。
  • ExceptionType1, ExceptionType2等是要捕获的异常类型。这些异常可以是内置异常类型(如ValueError, TypeError, ZeroDivisionError等)或自定义异常类型的名称。
  • Exception是一个通用的异常类,可以捕获所有未被特定except子句捕获的异常。使用as e可以将捕获的异常对象绑定到变量e上,以便在except块中引用它。
  • else块是可选的,当try块中的代码成功执行而没有引发异常时,会执行else块中的代码。
  • finally块也是可选的,但无论是否发生异常,它都会执行。通常用于执行清理操作,如关闭文件、释放资源等。

2、常见用法:

1、捕捉特定异常:

def divide_numbers(a, b):  try:  result = a / b  return result  except ZeroDivisionError:  print("Error: Division by zero is not allowed.")  # 这里可以选择返回一个值,抛出一个新的异常,或者做其他处理  return None  # 测试
print(divide_numbers(10, 2))  # 输出: 5.0  
print(divide_numbers(10, 0))  # 输出: Error: Division by zero is not allowed.
  • 具体特定的异常常见的有:
名称说明
ValueError传入无效的参数。
TypeError对类型无效的操作。
Warning警告。
SyntaxError语法错误。
RuntimeError运行时错误。
ReferenceError引用错误。
ImportError导入失败。
LookupError无效数据查询的基类。
OSError操作系统错误。

2、处理多个异常类型:

try
{int result = Divide(10, 0); // 除以0的异常print("结果:" + result);
}
except DivideByZeroException as e:
{print("除以0异常:" + e.Message);
}
except ArithmeticException as e
{print("算术异常:" + e.Message);
}

3、文件操作:

当读取或写入文件时,可能会出现文件不存在、没有权限等异常情况。

try:  with open('example.txt', 'r') as file:  content = file.read()  
except FileNotFoundError:  print("文件不存在!")  
except PermissionError:  print("没有权限读取文件!")  
except Exception as e:  print(f"发生了一个错误: {e}")

4、网络请求

在发送HTTP请求时,可能会因为网络问题或服务器错误而失败。

import requests  try:  response = requests.get('http://example.com')  response.raise_for_status()  # 如果响应状态码不是200,则抛出HTTPError异常  print(response.text)  
except requests.exceptions.HTTPError as errh:  print("Http Error:", errh)  
except requests.exceptions.ConnectionError as errc:  print("Error Connecting:", errc)  
except requests.exceptions.Timeout as errt:  print("Timeout Error:", errt)  
except requests.exceptions.RequestException as err:  print("Something Else", err)

5. 用户输入验证

在接收用户输入时,可能需要进行一些验证,以确保输入是有效的。

try:  age = int(input("请输入你的年龄: "))  if age < 0:  raise ValueError("年龄不能是负数!")  
except ValueError as e:  print(e)  
except Exception as e:  print("发生了一个错误:", e)

6. 数据库操作

与数据库交互时,可能会遇到连接失败、查询错误等问题。

import sqlite3  try:  # 连接到SQLite数据库(如果数据库不存在,则会自动在当前目录创建)  conn = sqlite3.connect('example.db')  c = conn.cursor()  # 执行SQL命令  c.execute('''CREATE TABLE stocks  (date text, trans text, symbol text, qty real, price real)''')  
except sqlite3.Error as e:  print(e)  
finally:  if (conn):  conn.close()

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

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

相关文章

【ARM系列】GIC600AE功能安全

GIC600AE在原GIC600版本基础上增加了FuSa功能&#xff0c;所增加的FuSa特性都集成在GIC600外围&#xff0c;不会改变原GIC600的功能。 GIC600AE主要安全机制分布图&#xff1a; GIC-600AE包含以下FuSa安全机制&#xff1a; lockstep logic protection 通过添加duplication l…

C++ 类与对象(中)

C 类与对象&#xff08;中&#xff09; 1. 类的6个默认成员函数2. 构造函数2.1 概念2.2 特性 3.析构函数3.1 概念3.2 特性 4. 拷贝构造函数4.1 概念4.2 特征 5.赋值运算符重载5.1 运算符重载5.2 赋值运算符重载 1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c…

数据库操作-DML和DQL

DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 添加数据&#xff08;INSERT&#xff09; 1.指定字段添加数据&#xff1a; insert into 表名 ( 字段名 1, 字段名 2) values ( 值 1, 值 2); 2…

【面试题】TLS和SSL协议的区别

TLS&#xff08;Transport Layer Security&#xff09;和SSL&#xff08;Secure Sockets Layer&#xff09;协议都是用于在网络上建立安全通信连接的协议&#xff0c;但它们在多个方面存在区别。以下是TLS和SSL协议之间区别的详细分析&#xff1a; 1. 发展历程与标准化 SSL&a…

Qt | 2D 时钟设计

01、重点内容公布 Qt | windows Qt6.5.3安卓环境搭建成功版(保姆级教程)VS2022 配置Qt编译环境 | winows安装Qt5.14.2 | VS2017和Qt5配置成功指南

企业本地大模型用Ollama+Open WebUI+Stable Diffusion可视化问答及画图

最近在尝试搭建公司内部用户的大模型&#xff0c;可视化回答&#xff0c;并让它能画图出来&#xff0c; 主要包括四块&#xff1a; Ollama 管理和下载各个模型的工具Open WebUI 友好的对话界面Stable Diffusion 绘图工具Docker 部署在容器里&#xff0c;提高效率 以上运行环境…

高薪程序员必修课-Spring中如果核心线程数为0,线程池会如何执行

目录 前言 线程池的原理 核心线程数为0的情况 示例代码 示例解释 运行示例 示例运行分析 总结 前言 在Spring&#xff08;以及底层的Java Executor 框架&#xff09;中&#xff0c;如果线程池的核心线程数设置为0&#xff0c;线程池的行为将受到影响。了解这种情况下线程…

python库 - json

文章目录 主要功能常用函数1. json.dumps()2. json.loads()3. json.dump()4. json.load() 自定义序列化和反序列化自定义序列化自定义反序列化 json 是 Python 标准库中的一个模块&#xff0c;用于处理 JSON&#xff08;JavaScript Object Notation&#xff09;数据格式。JSON …

17-Pandas缺失值处理

Python Pandas缺失值处理 在一些数据分析业务中&#xff0c;数据缺失是我们经常遇见的问题&#xff0c;缺失值会导致数据质量的下降&#xff0c;从而影响模型预测的准确性&#xff0c;这对于机器学习和数据挖掘影响尤为严重。因此妥善的处理缺失值能够使模型预测更为准确和有效…

20240627构造专题

写在前面&#xff1a;出场即巅峰&#xff08;明日模拟赛RP&#xff09; 一.何为构造 就是通过对一道题题面的分析可以发现某种规律&#xff08;类似于不完全归纳法&#xff09;&#xff0c;然后发掘本质&#xff0c;就可以很快的解题&#xff0c;但是显然我还没有掌握 二.一…

基于星火大模型的群聊对话分角色要素提取挑战赛Task1笔记

基于星火大模型的群聊对话分角色要素提取挑战赛Task1笔记 跑通baseline 1、安装依赖 下载相应的数据库 !pip install --upgrade -q spark_ai_python2、配置导入 导入必要的包。 from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler from sparkai.core.messages…

JAVA基础教程DAY2-类的构造方法及类的实例化调用

下面我们来讲如何建好类以及如何将它实例化 首先建立一个学生类Student&#xff0c;里面要求有属性&#xff0c;学号、年龄为int型&#xff0c;姓名&#xff0c;方法有学习study 在Student.java文件当中&#xff0c;我们完成以上代码为 public class Student {int age17;in…

【JS】期末复习题

一、选择题 1&#xff0e;下面四种标签哪种写法不正确&#xff08; D &#xff09;。 A&#xff0e;<html></html> B&#xff0e;<Html></Html> C&#xff0e;<HTML></HTML> D&#xff0e;<html><h…

React基础与核心概念探索

目录 React简介 起源与设计理念 JSX语法 什么是JSX&#xff1f; 为什么使用JSX&#xff1f; JSX的转换过程 组件化架构 React组件的概念 分类&#xff1a;函数组件 vs 类组件 状态管理 Props传递 虚拟DOM 高效DOM更新的秘密 工作原理 React简介 起源与设计理念 React&…

操作系统大题复习

磁盘调度算法 一次磁盘读写需要的时间 寻道时间 先来先服务FCFS 优点&#xff1a;公平 缺点&#xff1a;性能差&#xff0c;寻道时间长 最短寻道时间有限SSTF 缺点&#xff1a;可能产生饥饿现象 扫描算法SCAN 优点&#xff1a;不会产生饥饿现象 缺点&#xff1a;响应频率…

Node.js学习(一)

Node.js安装与入门案例&#xff1a; 需求&#xff1a;点击按钮&#xff0c;请求本地目录指定文件的内容&#xff0c;并显示在页面上 刚入门肯定想着直接写相对路径请求指定路径数据就行了&#xff0c;可是会发现不行。 网页运行在浏览器端&#xff0c;通常后续要发布&#xf…

docker部署wg-easy和firefly

Background WireGuard是一种新型的VPN协议,它通过在内核层运行,提供高效、安全、简单和现代的VPN解决方案。wg-easy是一个专为简化 WireGuard VPN配置和管理而设计的工具&#xff0c;提供了界面化的管理&#xff0c;进一步降低WireGuard 的使用门槛&#xff0c;让用户无需深入了…

在Linux中对Nginx配置rewrite跳转

nginx安装在IP为x.x.x.x的服务器上 rewrite语法&#xff1a; rewrite <正则表达式> <指定替换的内容> <flag标记> 注释&#xff1a;使用nginx提供的全局变量或自己设置的变量&#xff0c;结合正则表达式和标记位&#xff08;redirect返回302临时重定向…

css_23_多列布局

常用值&#xff1a; column-count&#xff1a;指定列数&#xff0c;值是数字。 column-width&#xff1a;指定列宽&#xff0c;值是长度。 columns &#xff1a;同时指定列宽和列数&#xff0c;复合属性&#xff1b;值没有数量和顺序要求。 column-gap&#xff1a;设置列边距…

Java时间转换

一、线程不安全 Date date new Date(); SimpleDateFormat dateFormat new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String prefix dateFormat.format(date);二、线程安全,建议使用 String t1 LocalDateTime.now().format(DateTimeFormatter.ofPattern("y…