您现在的位置是:首页 > 正文

Python之异常设计(一)

2024-02-01 01:50:35阅读 4

一 定义

异常分为两类:一类是自动触发异常如除零错误;另一类是通过raise触发。

二 为什么要使用异常

  1. 当程序运行时,如果检测到程序错误,Python就会引发异常,我们可以在程序中使用try语句捕获异常,并对异常进行处理。如果我们不做异常的捕获,异常就会一直往上层抛出,直到顶层Python的默认异常处理器,默认异常处理器将会停止程序并打印异常,这通常会引起程序崩溃,造成不好的用户体验,这不是我们想要的。
  2. 一个函数执行到中间某个部分时,出错了如何跳出该函数呢,只能通过抛出异常,让函数跳出该函数,会跳到上一层捕获到异常的地方执行

 

三 捕获异常

try:
    list=[2]
    print(list[1]
except IndexError:
    print('goto exception')

 

四 引发异常

try
    raise IndexError
except IndexError:
    print('goto exception')

raise 传递异常有三种方式

1、raise <instense> 给raise提供一个实例, 当引发异常的时候,如果except中包含了as子句,as 后的变量将会被分配给该实例

2、raise <class>  如果raise一个类,python会调用不带参数的构造函数创建一个被引发的实例

3、raise  用于重新引发异常,如果捕获到异常后,还需要将该异常再往上抛,就可以使用这种方式

 

 

 

五 自定义异常

class MyException(Exception)
    pass

def raise_error():
    raise MyException()

try:
    raise_error()
except MyException:
    print('goto ')

 

六 终止行为 finally

可以通过finally定义不管是否发生异常都执行的行为。当发生异常时,执行finally块中的代码,然后将异常往上抛。比如,我们想要在调用的函数执行完或发生异常时,释放数据库连接或确保文件关闭,就可以在finally中来实现

 

try:
    raise IndexError
finally:
    pass

 

py2.6和py3引入了with/as语句,as是可选的,可作为try/finally用法的替代。with/as用于执行一些必须“终止”或“清理”的行为,无论是否引发异常都会进行“终止”或“清理”行为

 

 

以上是Python异常的基本知识,我将在下一篇进一步探讨异常

 

转载于:https://www.cnblogs.com/lfxiao/p/9185221.html

网站文章

  • Redis 高可用之持久化

    Redis 高可用之持久化

    在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务( 如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。

    2024-02-01 01:50:29
  • 14. 二分查找

    DescriptionFor a given sorted array (ascending order) and a target number, find the first index of t...

    2024-02-01 01:50:23
  • 大数据—Hadoop生态圈

    大数据—Hadoop生态圈

    前言 整理了一下目前常用的hadoop组件,后续将会对这些组件的具体应用场景和使用细节进行展开分析。如果大家发现有更好的建议欢迎大家在下方留言。

    2024-02-01 01:49:55
  • 1021 个位数统计 (15 分)

    1021 个位数统计 (15 分) 给定一个 k 位整数 N=dk−1 10k−1 +⋯+d1 101 +d0 (0≤di ≤9, i=0,⋯,k−1, dk−1 &gt;0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。 输入格式: 每个输入包含 1 个测试用例,即一个不超过...

    2024-02-01 01:49:47
  • [ C++ ] STL _ Vector使用及其模拟实现

    [ C++ ] STL _ Vector使用及其模拟实现

    [ C++ ] STL _ Vector使用及其模拟实现

    2024-02-01 01:49:41
  • 移动端与pc端的区别

    第一: PC考虑的是浏览器的兼容性,而移动端开发考虑的更多的是手机兼容性,因为目前不管是android手机还是ios手机,一般浏览器使用的都是webkit内核,所以说做移动端开发,更多考虑的应该是手机...

    2024-02-01 01:49:33
  • 解决redis \xac\xed\x00\x05t\x00\x04 自定义RedisTemplate

    通过自定义RedisTemplate解决 package com.springboot.config; import com.fasterxml.jackson.annotation.JsonAuto...

    2024-02-01 01:49:01
  • Absence event can be deleted after finalize

    Set Up HRMS>Product Related>Global Payroll & Absence Mgmt>Absence Management>CountryTab: Event EntryThere are three delete options available:Delete Option "All Events"Delete Option "A...

    2024-02-01 01:48:55
  • 【Java|基础篇】内部类

    【Java|基础篇】内部类

    内部类就是在一个类中再定义一个类,内部类也是封装的体现.它可以被声明为public、protected、private 或默认访问控制符。内部类可以访问外部类的所有成员变量和方法,包括私有成员。内部类...

    2024-02-01 01:48:26
  • python实现读取并显示图片的方法(PIL)

    PIL 1. 显示图片 1 2 3 fromPIL importImage im =Image.open(&#39;lena.png&#39;) im.show() 2. 将 PIL Image 图片转换为 numpy 数组 1 2 im_array =np.array(im) # 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅...

    2024-02-01 01:48:18