Python 中的异常处理

2023-11-14

Python 中的异常处理

异常的原因通常在程序本身之外。例如,不正确的输入、输入输出设备故障等。由于程序在遇到异常时会突然终止,因此可能会对系统资源(如文件)造成损害。因此,应该正确处理异常,以防止程序突然终止。

Python 使用tryexcept关键字来处理异常。两个关键字后面都有缩进块。

Syntax:

try :
    #statements in try blockexcept :
    #executed when error in try block

Copy

try:块包含一个或多个可能会遇到异常的语句。如果此块中的语句无异常执行,则跳过后续的 except:块。

如果异常确实发生,程序流将转移到 except:块。except:块中的语句旨在适当地处理异常的原因。 例如,返回适当的错误消息。

您可以在except关键字后指定异常的类型。只有当指定的异常发生时,才会执行后续块。 一个 try 块中可能有多个异常类型不同的 except 子句。如果异常类型与任何异常块都不匹配,它将保持未处理状态,程序将终止。

除块之后的其余语句将继续执行,不管是否遇到异常。

下面的示例将在我们试图用字符串来设计整数时引发异常。

Example: try...except blocks

try:
    a=5
    b='0'
    print(a/b)except:
    print('Some error occurred.')print("Out of try except blocks.")

Copy

Output

Some error occurred.Out of try except blocks.

Copy

您可以在 except 关键字前面提到特定类型的异常。只有当指定的异常发生时,才会执行后续块。在一个 try 块中可能有多个具有不同异常类型的 except 子句。如果异常类型与任何异常块都不匹配,它将保持未处理状态,程序将终止。

Example: Catch Specific Error Type

try:
    a=5
    b='0'
    print (a+b)except TypeError:
    print('Unsupported operation')print ("Out of try except blocks")

Copy

Output

Unsupported operation
Out of try except blocks

Copy

如上所述,单个尝试块可以有多个例外块。以下示例使用两个 except 块来处理两种不同的异常类型:

Example: Multiple except Blocks

try:
    a=5
    b=0
    print (a/b)except TypeError:
    print('Unsupported operation')except ZeroDivisionError:
    print ('Division by zero not allowed')print ('Out of try except blocks')

Copy

Output

Division by zero not allowed
Out of try except blocks

Copy

但是,如果变量 b 设置为“0”,将会遇到类型错误,并由相应的异常块处理。

否则最后

在 Python 中,关键字elsefinally也可以与 try 和 except 子句一起使用。 如果异常发生在 try 块内部,则执行 except 块,如果发现 try 块没有异常,则处理 else 块。

Syntax:

try:
    #statements in try blockexcept:
    #executed when error in try blockelse:
    #executed if try block is error-freefinally:
    #executed irrespective of exception occured or not

Copy

finally 块由语句组成,无论 try 块中是否出现异常,这些语句都应该被处理。因此,无错误的 try 块会跳过 except 子句,并在继续执行其余代码之前进入 finally 块。但是,如果 try 块中有异常,将处理适当的 except 块,并且在继续执行代码的其余部分之前,将处理 finally 块中的语句。

下面的示例接受来自用户的两个数字并执行它们的除法。它演示了 else 和 finally 块的用法。

Example: try, except, else, finally blocks

try:
    print('try block')
    x=int(input('Enter a number: '))
    y=int(input('Enter another number: '))
    z=x/yexcept ZeroDivisionError:
    print("except ZeroDivisionError block")
    print("Division by 0 not accepted")else:
    print("else block")
    print("Division = ", z)finally:
    print("finally block")
    x=0
    y=0print ("Out of try, except, else and finally blocks." )

Copy

第一次跑步是正常情况。显示 out of else 和 finally 块,因为 try 块是无错误的。

Output

try block
Enter a number: 10Enter another number: 2else block
Division =  5.0finally block
Out of try, except, else and finally blocks.

Copy

第二次运行是被零除的情况,因此,执行 except 块和 finally 块,但不执行 else 块。

Output

try block
Enter a number: 10Enter another number: 0except ZeroDivisionError block
Division by 0 not acceptedfinally block
Out of try, except, else and finally blocks.

Copy

在第三次运行的情况下,出现了一个未捕获的异常。final 块仍然被执行,但是程序终止,并且在 final 块之后不执行程序。

Output

try block
Enter a number: 10Enter another number: xyzfinally block
Traceback (most recent call last):
  File "C:\python36\codes\test.py", line 3, in <module>
    y=int(input('Enter another number: '))ValueError: invalid literal for int() with base 10: 'xyz'

Copy

通常,finally 子句是清理流程中操作的理想位置。例如,不管读/写操作中的错误如何,都要关闭文件。这将在下一章讨论。

引发异常

Python 还提供了raise关键字,用于异常处理的上下文中。它导致显式生成异常。隐式引发内置错误。但是,可以在执行过程中强制执行内置或自定义异常。

下面的代码接受来自用户的数字。如果数值超出允许的范围,try 块将引发 ValueError 异常。

Example: Raise an Exception

try:
    x=int(input('Enter a number upto 100: '))
    if x > 100:
        raise ValueError(x)except ValueError:
    print(x, "is out of allowed range")else:
    print(x, "is within the allowed range")

Copy

Output

Enter a number upto 100: 200200 is out of allowed rangeEnter a number upto 100: 5050 is within the allowed range

Copy

这里,引发的异常是ValueError类型。但是,您可以定义要引发的自定义异常类型。 访问 Python 文档,了解更多关于用户定义异常的信息。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的异常处理 的相关文章

  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • Django Rest Framework 是否有第三方应用程序来自动生成 swagger.yaml 文件?

    我有大量的 API 端点编写在django rest framework并且不断增加和更新 如何创建和维护最新的 API 文档 我当前的版本是 Create swagger yaml文件并以某种方式在每次端点更改时自动生成 然后使用此文件作
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 如何将 Django 中的权限添加到模型并使用 shell 进行测试

    我在模型中添加了 Meta 类并同步了数据库 然后在 shell 中创建了一个对象 它返回 false 所以我真的无法理解错误在哪里或者缺少什么是否在其他文件中可能存在某种配置 class Employer User Employer in
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的

随机推荐

  • Java bean 详解

    JavaBean 介绍 功能特点 分类 组成 属性 方法 事件 event 范围 scope 页面page 请求request 对话session 应用application 任务 设计目标 1 紧凑而方便的创建和使用 2 完全的可移植性
  • Selenium分布式自动化测试平台 Standalone Server 4.0 搭建

    最新的selenium测试平台大概有这么几个组件 Selenium Standalone Server 用来搭建远程测试平台以及分布式测试 Selenium WebDriver 最基础的用来创建测试脚本以及用来和上面的server进行交互的
  • CSP 202305-3 解压缩

    这道T3主要是能够读懂题目 然后根据题意进行模拟 需要比较多的位运算 在此题 我选择用uint8 t存储一个字节 然后对字符和数字进行了转换 include
  • Java多线程-锁的概念

    1 结婚戒指的意义 根据文献记载 最早使用戒指人就是希腊的悲剧英雄 被缚的普罗米修斯 宙斯为惩罚普罗米修斯盗火给人类 将他绑缚在考卡苏斯山上 每天都有一只老鹰飞到山上 将他的内脏啄出 到了夜晚 他所失去的器官又会重新长出来 后来 大力士海格
  • Kubernetes 中部署 NFS Provisioner 为 NFS 提供动态分配卷

    Kubernetes 中部署 NFS Provisioner 为 NFS 提供动态分配卷 文章目录 Kubernetes 中部署 NFS Provisioner 为 NFS 提供动态分配卷 一 NFS Provisioner 简介 二 创建
  • bert-as-service配置

    环境配置 conda create n bert service python 3 8 conda activate bert service pip install user nvidia pyindex pip install user
  • 11.Java数据库连接

    Java数据库连接 概念 在软件开发中 经常需要与数据库进行交互来存储和检索数据 Java提供了一种称为JDBC Java Database Connectivity 的API 用于连接和操作各种类型的关系型数据库 数据库连接是指通过Jav
  • 卷积与傅立叶变换

    一 卷积 1 一维的卷积 连续 在泛函分析中 卷积是通过两个函数 f x f x f x 和 g x g x g x 生成第三个函数的一种算子 它代表的意义是 两个函数中的一个 我取 g x
  • 私人网站域名服务器公安备案指南【网站备案】

    今天收到了工信部的审核通过短信 你的服务器要想使用域名解析 其中一个要求就是服务器要有备案 很开心 但 事情没那么简单 要求你30天内进行公安备案 我打开谷歌网址 开始了我的坎坷备案之旅 一天下午 加一天晚上 第二天下午
  • vue —— 路由 replace

    作用 控制路由跳转时操作浏览器历史记录的模式 2 浏览器的历史记录有两种方式 分别为 push 和 replace push是追加历史记录 replace是替换当前记录 路由跳转的时候默认 push 3 开启replace模式
  • CPU使用率和负载Load计算方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Loadavg分析 Loadavg浅述 cat proc loadavg 可以看到当前系统的load cat proc loadavg 0 01 0 02 0 05 2 3
  • 判断两条线段是否相交(C++)

    背景 在做51nod上的第1951题时 需要根据给出的两条线段来判断这两条线段是否相交 所以在这里记录一下 判断两条线段是否相交有两步 快速排斥计算 跨立计算 快速排斥 给出线条AB CD 如果以AB CD为对角线的矩形不相交 那么AB C
  • mysql5.5安装最后卡主_在MySQL5.5版本时安装到最后一步卡死的解决办法

    今天给老师安装mysql 5 5 版本时出了问题 老师的电脑为windows7 mysql安装版本为mysql 5 5 安装到最后一步 mysql实例配置最后一步卡死了 安装了多次也没有方法 百度了许多方法 比如删除注册表 删除某些主要文件
  • 量化交易项目怎么做

    同学们前面两期量化交易内容 Python量化交易入门 量化交易的历史 文章目录 学习目标 1 量化交易研究流程 1 1 分析结果 1 2 什么是策略 1 3 流程包含的内容 二 量化开发和研究岗位的要求 学习目标 1 说明量化交易的研究流程
  • SourceTree 解決冲突 Please commit your changes or stash them before you merge.

    目录 本机环境 通过 Sourcetree 拉取代码时提示冲突信息 一 本机环境 本机系统 Mac git 2 24 1 git version 查看 二 通过 Sourcetree 拉取代码时提示冲突信息 原因 同分支下 其他伙伴修改的
  • @SpringBootApplication失效问题

    SpringBootApplication的默认扫描范围 在练习springsecurity中 突然发现spring的自动配置失效 需要手动的在主应用程序类添加 ComponentScan才可以扫描到 然后排查发现idea自动在根路径创建一
  • 提示工程师指南4-ChatGPT Prompt Engineering

    ChatGPT Prompt Engineering 在这个部分 我们将介绍 ChatGPT 的最新提示工程技术 包括技巧 应用 限制 论文和额外的阅读材料 主题 与 ChatGPT 对话 Python 笔记本 请注意 本部分正在紧密开发中
  • java中的service层,dao层,controller层的理解

    基本概念 DAO层 DAO层叫数据访问层 属于一种比较底层 比较基础的操作 具体到对于某个表的增删改查 也就是说某个DAO一定是和数据库的某一张表一一对应的 其中封装了增删改查基本操作 Service层 Service层叫服务层 被称为服务
  • WORD文档误删除、误清空等恢复的几种方法

    前因 word中保存了近一个星期的读书笔记 设置了自动保存 也会习惯性的CTRL S手动保存 但前天word不知怎么就挂了 再打开时写的文档已经不在本地文件夹了 当时就傻眼了 刚开始只好认栽就打算重新录一遍吧 但越想越觉得浪费时间 觉得肯定
  • Python 中的异常处理

    异常的原因通常在程序本身之外 例如 不正确的输入 输入输出设备故障等 由于程序在遇到异常时会突然终止 因此可能会对系统资源 如文件 造成损害 因此 应该正确处理异常 以防止程序突然终止 Python 使用try和except关键字来处理异常