Python之面向对象(七)异常处理

6.10 异常处理

  1. 程序中的错误分为两种:语法错误和逻辑错误

    1. 语法错误:
    2. if
      
      #------------------
      print(haha
    3. 逻辑错误:
    4. #用户输入不完整(比如输入为空)或者输入非法(输入不是数字)
      num=input(">>: ")
      int(num)
  2. 什么是异常:代码发生异常错误之后,你的程序就中断了

  3. 什么是异常处理:当代码出现异常时,我通过某种方式不让你程序中断,合理的跳出去,叫做异常处理
  4. 为什么要有异常处理?用户体验良好,使你的代码更有健壮性容错性
  5. 异常处理的两种方式:
    • if判断式

      总结:

      1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。

      2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差

      3.if是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理。

    • python专有异常处理

      python:为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理

  6. 错误举例:
    1. # 触发IndexError
      l=['egon','aa']
      l[3]
      # 触发KeyError
      dic={'name':'egon'}
      dic['age']
      
      #触发ValueError
      s='hello'
      int(s)
  7. 常用异常:
    1. AttributeError #试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
      IOError #输入/输出异常;基本上是无法打开文件
      ImportError #无法引入模块或包;基本上是路径问题或名称错误
      IndentationError #语法错误(的子类) ;代码没有正确对齐
      IndexError #下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
      KeyError #试图访问字典里不存在的键
      KeyboardInterrupt #Ctrl+C被按下
      NameError #使用一个还未被赋予对象的变量
      SyntaxError #Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
      TypeError #传入对象类型与要求的不符合
      UnboundLocalError #试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
      导致你以为正在访问它
      ValueError #传入一个调用者不期望的值,即使值的类型是正确的
  8. 单分支捕获异常:
    1. #基本语法:
      try:
          被检测的代码块
      except 异常类型:
        try 一旦检测异常,就执行这个位置的逻辑
      
      try:
          num=int(input("----"))#出现ValueError错误之后,直接跳转到except语句
          dic={'name':"嘉欣"}
          print(dic['age'])
      except ValueError:
          print(66)
  9. 多分支捕获异常
    1. try:
          num=int(input("----"))#出现ValueError错误之后,直接跳传到except语句
          dic={'name':'加薪'}
          print(dic['age'])
          l1=[1,2]
          print(l1[100])
          print(11)
      except ValueError:
          print('输入有非数字元素')
      except KeyError:
          print('没有此键')
      except IndexError:
          print('没有此下标')
      print(666)
  10. 万能异常捕获:处理所有python识别的异常
    1. try:
          dic={'name':'嘉欣'}
          l1=[1,2]
          print(l1[100])
          print(111)
          for i in 123:
              pass
      except Exception as e:
          print(e)
      print(666)
  11. 什么时候用万能?什么时候用多分支?:如果你对错误信息不关心,只是想要派出错误让程序继续运行,就用万能异常 你对错误信息要进行明确的分流,让你的程序多元化开发
  12. 多分支+万能异常
    1. def func():
          pass
      
      def func1():
          pass
      
      dic = {
          1: func,
          2: func1,
      }
      
      try:
          num = int(input('请输入序号'))
          dic[num]()
      except ValueError:
          print('请输入数字')
      except KeyError:
          print('请输入范围内的序号')
      except Exception:
          print('程序出现意料之外的错误....')
  13. try.....else......finally
    1. try:
          dic = {'name': '嘉欣'}
          print(dic['age'])
          l1 = [1, 2]
          print(l1[100])
          print(111)
      except KeyError:
          print('没有此键')
      except IndexError:
          print('没有此下标')
      else:
          print('如果没有出现异常则执行这里')
      finally:
          print('finally 666')
      #except必须依赖于try,else必须依赖于except和try
      #finally只是依赖于try
      #当没有异常执行else finally 有异常则执行异常 和finally
      #finally 用在关闭数据库连接,文件句柄关闭,数据保存等,用到finally
  14. 主动触发异常
    1. class A:
          def func(self):
              raise Exception("使用父类方法")
      class B(A):
          def func(self):
              print("in B func")
      class C(A):
          def func(self):
              print("in C func")
      class D(A):
          def func1(self):
              print("in D func1")
      def function(obj):
          obj.func()
      obj1 = D()
      function(obj1)
      # 结果:
      Exception: 使用父类方法
  15. 断言:展现一种强硬的态度
    1. name="alex"
      n1=input("请输入")
      assert name=n1
      print(11)
      print(22)
  16. 自定义异常
    1. python中提供的错误类型很多种,但是不是全部的错误
    2. class LiYeError(BaseException):
      
          def __init__(self,msg):
              self.msg=msg
          def __str__(self):
              return self.msg
      
      try:
          # 三行
          raise LiYeError('socket.connent.....')
      except LiYeError as e:  # e = LiYeError('类型错误')
          print(e)
      
  17. try...except的方式比较if的方式的好处
    1. 改善代码容错性
    2. 增强程序鲁棒性

原文地址:https://www.cnblogs.com/zhangdadayou/p/11415380.html

时间: 2024-10-24 09:12:41

Python之面向对象(七)异常处理的相关文章

python面向对象07/异常处理

目录 python面向对象07/异常处理 1.异常错误分类 2.什么是异常? 3.异常处理 4.为什么要有异常处理? 5.异常处理的两种方式 5.1 if判断 5.2 try python面向对象07/异常处理 1.异常错误分类 语法错误: # if 2 > 1 # print(222) # # dic = {'name'; 'alex'} # tu = (2, 3, 4'' 6 ) 逻辑错误: # num = int(input('请输入数字')) # dic = {'name': '海狗',

Python爬虫实战七之计算大学本学期绩点

大家好,本次为大家带来的项目是计算大学本学期绩点.首先说明的是,博主来自山东大学,有属于个人的学生成绩管理系统,需要学号密码才可以登录,不过可能广大读者没有这个学号密码,不能实际进行操作,所以最主要的还是获取它的原理.最主要的是了解cookie的相关操作. 本篇目标 1.模拟登录学生成绩管理系统 2.抓取本学期成绩界面 3.计算打印本学期成绩 1.URL的获取 恩,博主来自山东大学~ 先贴一个URL,让大家知道我们学校学生信息系统的网站构架,主页是 http://jwxt.sdu.edu.cn:

Python 3面向对象编程

这篇是计算机类的优质预售推荐>>>><Python 3面向对象编程> 编辑推荐 本书不是Python 的入门书籍,适合具有Python 基础经验的开发人员阅读.如果你拥有其他面向对象语言的经验,你会更容易理解本书的内容. 内容简介 Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性.本书通过Python 的数据结构.语法.设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则.本书不是Python 的入门书籍,

Python爬虫入门七之正则表达式

在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我

My way to Python - Day05 - 面向对象-思维导图

My way to Python - Day05 - 面向对象 思维导图

转 Python爬虫入门七之正则表达式

静觅 » Python爬虫入门七之正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容就易如反掌了. 正则表达式的大致匹配过程是:1.依次拿出表达式和文本中的字符比较,2.如果每一个

python 学习笔记 6 -- 异常处理

当你的程序中出现某些 异常的 状况的时候,异常就发生了.例如,当你想要读某个文件的时候,而那个文件不存在.或者在程序运行的时候,你不小心把它删除了. 那么如果你是在IDE中运行,一个错误发生,异常会被打引出来,这便是未处理异常:当异常发生时,如果没有代码去关注和处理它,这些异常会传给置在Python中的缺省处理,他会输出一些调试信息并且终止运行.如果是在IDE中,这不是什么大事,但是如果是Python程序运行中的异常,它会导致整个程序终止,对于这些情况可以使用异常来处理. 1.try..exce

python学习笔记十——异常处理

1.try: command except 错误类型,记录错误信息变量: command finally: command try...finally的用处是无论是否发生异常都要确保资源释放代码的执行.一般来说,如果没有发生错误,执行过try语句块之后执行finally语句块,完成整个流程.如果try语句块发生了异常,抛出了这个异常,此时就马上进入finally语句块进行资源释放处理.如下从几个细节讨论finally的特性. 1).try中的return: 当在try语句块中含有return语句

python学习笔记七:条件&循环语句

1.print/import更多信息 print打印多个表达式,使用逗号隔开 >>> print 'Age:',42 Age: 42   #注意个结果之间有一个空格符 import:从模块导入函数 import 模块 from 模块 import 函数 from 模块 import * 如果两个模块都有open函数的时候, 1)使用下面方法使用: module1.open()... module2.open()... 2)语句末尾增加as子句 >>> import ma

Python -面向对象(一 基本概念)

一 Python简单介绍 Python是一个可移植的面向对象的脚本语言. Python尽管是一个脚本语言,但也是一个全然面向对象的语言. 由于它设计之初把易用性做为很重要的一个考量标准,所以用起来很简洁,优美(语法很灵活).所以使用Python能够高速地编写出可执行代码.与C/C++相比.Python程序的执行速度比較慢,一门语言既然能够生存下来.就有它自己的原因,Python语言也一样. 当今的计算机处理速度已经很快.对某些任务来说.执行速度并非首要考虑的因素.比方说为了实现数据库訪问的自己主