python基础16(错误、异常)

一、什么是错误,什么是异常

错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象。当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助程序恢复流程。换句话说,错误是一个事件,而异常是该事件创建的对象

当使用短语“产生异常”时,表示存在问题的方法发生错误,并创建异常对象(包含该错误的信息及发生的时间和位置)来响应该错误。导致出现错误和随后异常的因素包括用户错误、资源失败和编程逻辑失败。这些错误与代码实现特定任务的方法有关,而与该任务的目的无关。

如果不进行异常处理,即不对错误做出响应,程序的健壮性就会大打折扣,甚至无法保证正常运行,所以必须要进行异常处理。

在项目开发中,异常处理是不可或缺的。异常处理帮助人们debug,通过更加丰富的信息,让人们更容易找到bug的所在。异常处理还可以提高程序的容错性。

二、python中的异常

在Python中,异常也是对象,可对它进行操作。所有异常都是基类 Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。

python用异常对象(exception object)来表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的 回溯(Traceback, 一种错误信息)终止执行:

>>> 1/0

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    1/0
ZeroDivisionError: integer division or modulo by zero

按自己的方式出错

raise语句

为了引发异常,可以使用一个类(Exception的子类)或者实例参数数调用raise 语句。下面的例子使用内建的Exception异常类:

>>> raise Exception  # 引发一个没有任何错误信息的普通异常

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    raise Exception
Exception
>>> raise Exception(‘hyperdrive overload‘)   # 添加了一些异常错误信息

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    raise Exception(‘hyperdrive overload‘)
Exception: hyperdrive overload

常用的内建异常类:

三、捕捉异常

我们可以使用 try/except 来实现异常的捕捉处理。

>>> try:
    res = 2/0
except ZeroDivisionError:
    print "Error:Divisor must not be zero!"

Error:Divisor must not be zero!

看,我们真的捕获到了ZeroDivisionError异常!那如果我想捕获并处理多个异常怎么办呢?有两种办法,一种是给一个except子句传入多个异常类参数,另外一种是写多个except子句,每个子句都传入你想要处理的异常类参数。甚至,这两种用法可以混搭呢!

多个except 子句

try:
    x = input(‘Enter the first number: ‘)
    y = input(‘Enter the second number: ‘)
    print x/y
except ZeroDivisionError:
    print "The second number can‘t be zero!"
except TypeError:           # 对字符的异常处理
  print "Please enter a number!"
  
#再来运行:
>>>
Enter the first number: 10
Enter the second number: ‘hello,word‘
Please enter a number!

一个块捕捉多个异常

如果需要用一个块捕捉多个异常,那么可以将它们作为元组列出。

try:
    x = input(‘Enter the first number: ‘)
    y = input(‘Enter the second number: ‘)
    print x/y
except (ZeroDivisionError,TypeError,NameError):    # 将错误类型以列表方式列出
    print "Yout numbers were bogus..."

try ... except...else 语句

现在我们来说说这个else语句。Python中有很多特殊的else用法,比如用于条件和循环。放到try语句中,其作用其实也差不多:就是当没有检测到异常的时候,则执行else语句。

while True:
    try:
        x = input(‘Enter the first numbre: ‘)
        y = input(‘Enter the second numbre: ‘)
        value = x/y
        print ‘x/y is‘,value
    except:
        print ‘Invalid input,please try again.‘
    else:
        break   # 这里的循环只在没有异常引发的情况才会退出

finally 子句

finally子句是无论是否检测到异常,都会执行的一段代码,我们可以丢掉except子句和else子句,单独使用try...finally,也可以配合except等使用。

try:
    s = 1/0
#except Exception,e:
except ZeroDivisionError, e:
    print ‘Error:%s‘ %e
finally:
    print ‘ok‘

完整的语法结构如下:

try:
    ...
except exception1:
    ...
except exception2:
    ...
except:
    ...
else:
    ...
finally:
    ...

如果try中有异常发生时,将执行异常的归属,执行except。异常层层比较,看是否是exception1, exception2...,直到找到其归属,执行相应的except中的语句。

时间: 2024-10-08 09:47:29

python基础16(错误、异常)的相关文章

Python基础之(异常与开发规范)

一.异常 1.1.Python中错误分为两种: 语法错误,这种错误根本过不了python解释器的语法检测,必须在程序执行前就改正 逻辑错误,如int("m") 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下: python中异常的种类: 1 #常用异常 2 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 3 IOError

python 基础篇 错误和异常处理

语法错误 所谓语法错误,也就是你写的代码不符合编程规范,无法被识别与执行,比如下面这个例子: if name is not None print(name) If 语句漏掉了冒号,不符合 Python 的语法规范,所以程序就会报错invalid syntax. 异常 异常则是指程序的语法正确,也可以被执行,但在执行过程中遇到了错误,抛出了异常,比如下面的 3 个例子: 10 / 0 Traceback (most recent call last): File "<stdin>&qu

Python基础16 - RabbitMQ队列、Redis缓存数据库

@@@文章内容参照老男孩教育 Alex金角大王,武Sir银角大王@@@ RabbitMQ队列 下载安装http://www.rabbitmq.com/install-windows.html RabbitMQ 教程官网:http://www.rabbitmq.com/getstarted.html RabbitMQ:erlang语言 开发的. Python中连接RabbitMQ的模块:pika .Celery(分布式任务队列) .haigha可以维护很多的队列 几个概念说明: Broker:简单

Python基础总结之异常、调试代码第十二天开始(新手可相互督促)

年薪20万的梦想,加油! 我们在写代码的时候,控制台经常会报错,因为某种错误,导致我们的程序停止,且不再运行下面的代码. 我们看一个错误的代码示例: def add_1(): #没有参数 print('我出错了') #不会被执行 def add_2(): #函数二调用函数一 print('第二个函数调用函数一,并给他一个参数') add_1(4) #函数一没有参数,所以有会报异常,并终止,不会执行函数一里面的代码 def add_3(): #函数三调用函数二 add_2() d = add_3(

2015/9/20 Python基础(16):类和实例

面向对象编程编程的发展已经从简单控制流中按步的指令序列进入到更有组织的方式中,依靠代码块可以形成命名子程序和完成既定的功能.结构化的或过程性编程可以让我们把程序组织成逻辑快,以便重复或重用.创造程序的过程变得更具逻辑性:选出的行为要符合规范,才可以约束创建的数据.迪特尔父子认为结构化编程是“面向行为”的,因为事实上,即使没有任何行为的数据也必须“规定”逻辑性.然而,如果我们能对数据加上动作呢?如果我们所创建和编写的数据片段,是真实生活中实体的模型,内嵌数据体和动作呢?我们通过一系列已定义的接口(

python常见的错误异常

1.AssertionError 该异常在assert()语句运行失败时输出 2.AttributeError 该异常在参考或设置属性失败时输出 eg:class Gs: pass g = Gs() g.add 此代码中引用了该类所没有的属性 4.ImportError 该异常是引用了该计算机中所没有的模块 5.IndexError 该异常是在序数对象中(列表,元组,字符串)的索引值超出范围是输出 eg: x = [1,2,3,4] x[5] 此代码中其索引值超出范围,则会抛出错误 6.File

Python基础16模块-re模块

1.正则表达式 #^表示在字符串开头匹配,$表示在字符串结尾匹配 #*匹配0到无穷多个 #+匹配1到无穷多个 #?匹配0或者1个 #{}定义匹配个数{0,}==*,{1,}==+,{0,1}==?,{6}=={1,6} #上面的元字符一般都是贪婪匹配,在后面加上?变成惰性匹配 #[]匹配括号里的字符,只匹配一次,^表示不包含,-表示范围,\表示转义字符,其他在中括号里都无特殊意义 #\d 匹配任何十进制的数 #\D 匹配任何非数字字符 #\s 匹配任何空白字符 #\S 匹配任何非空白字符 #\w

萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常

第一章 Python基础 第十节 文件和异常 从文件中读取数据 读取文件.文件路径   1 filename = 'pi_digits.txt' #文件名取个代号 2 #读取整个文件 3 with open(filename) as file_object: 4 contents = file_object.read()# 给内容取个代号 5 print(contents.rstrip()) 6 #逐行读取 7 with open(filename) as file_object: 8 for

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by