一、异常

1、异常基础

  1.为了让我们的代码在出现异常的时候,整个项目依然是可以正常运行的,所以我们引入了异常处理机制!

2.在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!

  1. try:
  2. pass
  3. except Exception,ex:
  4. pass

需求:将用户输入的两个数字相加

  1. while True:
  2. num1 = input('num1:')
  3. num2 = input('num2:')
  4. try:
  5. num1 = int(num1)
  6. num2 = int(num2)
  7. result = num1 + num2
  8. except Exception as e:
  9. print('出现异常,信息如下:')
  10. print(e)

2、异常种类

python中的异常种类非常多,每个异常专门用于处理某一项异常!!!

  1. dic = ["wupeiqi", 'alex']
  2. try:
  3. dic[10]
  4. except IndexError, e:
  5. print e

实例:IndexError

  1. dic = {'k1':'v1'}
  2. try:
  3. dic['k20']
  4. except KeyError, e:
  5. print e

实例:KeyError

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except ValueError, e:
  5. print e

实例:ValueError

对于上述实例,异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

1、简单异常

  1. # 未捕获到异常,程序直接报错
  2.  
  3. s1 = 'hello'
  4. try:
  5. int(s1)
  6. except IndexError,e:
  7. print e

所以,写程序时需要考虑到try代码块中可能出现的任意异常,可以这样写:

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except IndexError,e:
  5. print e
  6. except KeyError,e:
  7. print e
  8. except ValueError,e:
  9. print e

万能异常在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except Exception,e:
  5. print e

接下来你可能要问了,既然有这个万能异常,其他异常是不是就可以忽略了!

答:当然不是,对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except KeyError,e:
  5. print '键错误'
  6. except IndexError,e:
  7. print '索引错误'
  8. except Exception, e:
  9. print '错误'

try语句按照如下方式工作;

  • 首先,执行try子句(在关键字try和关键字except之间的语句)
  • 如果没有异常发生,忽略except子句,try子句执行后结束。
  • 如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
  • 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

2、异常其他结构

  1. try:
  2. # 主代码块
  3. pass
  4. except KeyError,e:
  5. # 异常时,执行该块
  6. pass
  7. else:
  8. # 主代码块执行完,执行该块
  9. pass
  10. finally:
  11. # 无论异常与否,最终执行该块
  12. pass
  1. import sys
  2. s1 = 'hello'
  3. try:
  4. int(s1)
  5. # sys.exit()
  6. except KeyError as e:
  7. print('键错误')
  8. except IndexError as e:
  9. print('索引错误')
  10. except Exception as e:
  11. print('错误')
  12. else:
  13. print("哈哈")
  14. finally:
  15. print("程序结束了!")

try except 语句还有一个可选的else子句和finally语句,finally语句要放在最后,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行!

3、主动触发异常【raise】

  1. try:
  2. raise Exception('错误了。。。')
  3. except Exception,e:
  4. print e

4、自定义异常

  1. class WupeiqiException(Exception):
  2.  
  3. def __init__(self, msg):
  4. self.message = msg
  5.  
  6. def __str__(self):
  7. return self.message
  8.  
  9. try:
  10. raise WupeiqiException('我的异常')
  11. except WupeiqiException,e:
  12. print e

注意:自定义异常要直接或者间接继承Exception异常类!

5、断言[assert]

  1. assert expression [, arguments]

注意:Python的assert是用来检查一个条件,如果它为真,就不做任何事。如果它为假,则会抛出AssertError并且包含错误信息。相当于if语句,起强调作用,一般用在测试代码中!

  1. # assert 条件
  2.  
  3. assert 1 == 1
  4.  
  5. assert 1 == 2

1、assert语句用来确认某个条件是真的。 
2、如果你非常确信某个条件是true,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。 
3、当assert语句失败的时候,会引发一AssertionError

总结:python中的异常处理机制结构如下:

注意:else和finally不是必选的,但是finally必须出现在else之后,finally必须在整个语句的最后位置;try后面的语句如果无异常产生则执行else语句,finally后面的字句表达的是无论是否发生异常,这些代码都必须执行!

try一般语句适合用在处理程序的异常问题!而try...finally语句一般是用在无论是否发生异常,都将需要执行后续处理(清理)的场合,无论是在通信完成或者发生网络错误时关闭网络连接,又或者在读一个文件时,无论是否有异常发生最后都要关闭文件,那就可以使用try...finally

 

  

Day7 错误和异常的更多相关文章

  1. python的错误和异常

    python错误和异常 错误 错误分为语法错误和逻辑错误 语法错误 >>> if File "<stdin>", line 1 if ^ Syntax ...

  2. Python错误和异常学习

    一:错误解释 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 代码运行前的语法或者逻辑错误,语法错误在执行前修改,逻辑错误无法修改 二:异常 执行过程 ...

  3. PHP 错误与异常 笔记与总结(10)错误处理器测试

    关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...

  4. Go语言项目的错误和异常管理 via 达达

    Go语言项目的错误和异常管理 最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享. 首先我 ...

  5. Python学习笔记七-错误和异常

    程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Pyt ...

  6. WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)

    WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日 ...

  7. php错误及异常捕捉

    原文:php错误及异常捕捉 在实际开发中,错误及异常捕捉仅仅靠try{}catch()是远远不够的. 所以引用以下几中函数. a)   set_error_handler 一般用于捕捉  E_NOTI ...

  8. PHP错误与异常

    请一定要注意,没有特殊说明:本例 PHP Version < 7 说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程 ...

  9. python 常见错误和异常 函数 正则表达式及多线程编程

    生成随机密码#!/usr/bin/env python import stringfrom random import choice def gen_pass(num=9): all_chs = st ...

随机推荐

  1. 使用PrintDBGridEh进行打印 (转)

    使用PrintDBGridEh进行打印 (转)   if not ADOQuery1.Active then exit;  if ADOQuery1.RecordCount<=0 then ex ...

  2. java IO(二)大文件复制

    package cn.sasa.demo3; import java.io.FileInputStream; import java.io.FileOutputStream; import java. ...

  3. 【数据可视化-pyecharts】pyecharts快速入门

    pyecharts快速开始 首先开始来绘制你的第一个图表 from pyecharts import Bar bar = Bar("我的第一个图表", "这里是副标题&q ...

  4. XSL常用用法语句

    1.xsl的开始语句 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Tra ...

  5. elasticsearch中文分词器ik-analyzer安装

    前面我们介绍了Centos安装elasticsearch 6.4.2 教程,elasticsearch内置的分词器对中文不友好,只会一个字一个字的分,无法形成词语,别急,已经有大拿把中文分词器做好了, ...

  6. bat处理打开关闭exe

    @echo off rem rem 注释 tastkill /f /im a.exe cd %CD% %CD:~0,1%: cd  %Cd%b start %CD%a.exe cd .. %CD:~0 ...

  7. LeetCode之有效括号

    class Solution:    def isValid(self,s):         #第一步,if 判断传入为空的情况        if s == "":      ...

  8. zha男/女的三种境界

    本文为chedan贴,谈一谈找对象时渣男/女的三种表现,分别对应三种境界,涉世未深的男生女生可加以小心,自身属于zha类型的可略过本文.    另,本文的恋爱观基于两个原则.一是对象应是从朋友到恋人的 ...

  9. Java通过POI生成Excel

    import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; impo ...

  10. 调用另一个文件的python代码【转载】

    转自:https://blog.csdn.net/u010412719/article/details/47089883 例如我们有a.py和b.py两个文件,当我们需要在b.py文件中应用a.py中 ...