欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python异常处理

程序员文章站 2024-03-18 12:29:58
...

python异常处理

     python有两种错误,分别是语法错误和异常。语法错误又叫解析错误,通常指python解析源代码的时候出现的错误。异常就是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。异常是python对象。通常我们需要捕获,否则程序会终止执行。所有的异常的基类就是baseException

一、捕获异常可以使用try/except/else/finally语句,正常的流程工作方式为:

  • 首先执行try字句
  • 如果过程中没有异常发生则忽略except子句,执行else子句或是退出异常语句块。
  • 如果在执行的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
  • 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
  • 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
  • 无论发什么情况,finally子句都会被执行。如果其他语句块中有return语句,现将返回语句挂起,执行完finally之后再执行返回语句

python异常处理

#encoding=UTF-8

'''

    @author:xianyt

    @vertion:python3

    @func:定义一个列表,从列表使用下标的方式获取数据,处理其中可能出现的异常(indexError)

'''

if __name__ =='__main__':

    test = [1,2,3]

    try:  #捕获异常

        i = int(input("请输入下标"))

        test[i]

    except ValueError as err:  #异常分支,捕获输入异常

        print("请输入数值下标")

        print(err)

    except IndexError as i: #捕获下标越界

        print("下标越界,请输入正确的下标范围")

        #print(i)

    else:    #如果没有出现异常,则正常输出

        print(test[i])

    finally:

        print("退出程序")

 

二、语句的搭配情况

     1、try\finally

     2、try\except

     3、try\except\else

     4、try\except\else\finally

三、使用raise语句抛出异常。首先必须是一个异常的实例或者是异常的类(也就是指exception的子类).

语法:raise [Exception [, args [, traceback]]]

#Encoding = Utf-8

'''

  @author:xianyt

  @vertion:python3

  @func:使用raise抛出异常

'''

if __name__ == '__main__':

  try:

  raise KeyboardInterrupt #抛出KeyboardInterrupt异常

  finally:

  print("goodbye,world!")

 

四、用户自定义异常

     可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类

#Encoding = Utf-8

'''

  @author:xianyt

  @vertion:python3

  @func:自定义输入性别和年龄异常

  思路:

  1、定义一个异常类,继承异常

  2、创建异常对象,抛出

  3、处理自定义异常

'''

class sexError(Exception): #定义异常类,继承exception

  def __init__(self, code, msg):

      self.code = code;

      self.msg = msg;

  def __str__(self):

      return self.code+':'+self.msg

class ageError(Exception):

  def __init__(self, code, msg):

      self.code = code;

      self.msg = msg;

  def __str__(self):

      return self.code+':'+self.msg

def inputSex():

      sex = input('请输入性别:')

      if sex == 'mele' or sex == 'famele':

          return sex

     else:

         raise sexError('001', '性别输入不合理(%s)'%(sex)) #抛出异常

def inputAge():

     age = input('请输入年龄:')

     if age.isdigit():

         age = int(age)

         if age>0 and age<140:

             return age

         else:

             raise ageError('003', '年龄输入不合理(%s)'%(age))

     else:

         raise ageError('002', '年龄必须是数值')

if __name__ == '__main__':

  try:

      inputSex();

  except sexError as e:

      print(e)

  else:

      print('性别输入成功')

  try:

      inputAge();

  except ageError as e:

      print(e)

  else:

      print('年龄输入成功')

五、异常体系

python异常处理

相关标签: python异常处理