Python--异常处理

一、异常处理

  1.ValueError 输入类型不能转换为int判断num1是否为数字,如果是,在执行后续操作,否则错误提示判断num2是否为数字,如果是,在执行后续操作,否则错误提 。

  2.ZeroDivisionError 除数不能为0如果num2不为0的时候,在进行后续操作,否则错误提示。

  3.解决方案:

    1、传统方案

    2、异常处理

        try:

          可能出现问题的代码/方法

        except:

           出现任何异常,该分支的代码会被执行

        except 之后没有明确写出捕获异常类型的,意味可以捕获所有的异常

  传统的解决方案:

 1 #从键盘录入被除数与除数,求商,并打印结果
 2 #a / b(传统的解决方案)
 3 num1 = input("输入被除数")
 4 num2 = input("输入除数")
 5 # 转换成int
 6 # 遇到错误: ValueError  输入类型不能转换为int
 7 if num1.isdigit() and num2.isdigit():
 8     num1 = int(num1)
 9     num2 = int(num2)
10     if num2 != 0:
11     # 求商 ZeroDivisionError  除数不能为0
12         result = num1 / num2
13         print("商为%g"%result)
14     else:
15         print("除数不能为0")
16 else:
17     print("数据有误)

  异常处理: 

 1 #从键盘录入被除数与除数,求商,并打印结果
 2 #a / b
 3 num1 = input("输入被除数")
 4 num2 = input("输入除数")
 5 # 转换成int
 6 try:
 7     # 遇到错误: ValueError  输入类型不能转换为int
 8     num1 = int(num1)
 9     num2 = int(num2)
10     # 求商 ZeroDivisionError  除数不能为0
11         result = num1 / num2
12         print("商为%g"%result)
13 except ValueError:
14        print("输入类型有误")
15 except ZeroDivisionError:
16         print("除数不能为0")
17 # 处理ValueError,ZeroDivisionError两种类型的错误,如果有第三种,无法捕获
18 except (ValueError,ZeroDivisionError):
19     print("输入类型错误,除数不能为0")

  4.捕获具体类型的错误

    try:

      可能出现问题的代码/方法

    except 错误类型1:

      出现对应类型的异常,该分支的代码会被执行

    except 错误类型2:

    except (错误类型3,错误类型4):   <------>把错误类型用元组来装起来

    ......

  5. 多个捕获异常分支的顺序问题

    1.语法上没有顺序要求

    2.逻辑上有顺序要求:

      子类异常在前,父类异常在后

  6. except 异常 as 变量:

    将捕获到的异常/错误,存储到变量中

  7.finally

    最后执行的代码,即使遇到异常,没有捕获到的时候,该代码块也会执行

    关闭文件,关闭数据库,关闭io流,关闭socket

  8. try:

   finally:

   try可以跟finally结合使用

 1 # 异常处理
 2     # try---except
 3 num1 = input("输入被除数")
 4 num2 = input("输入除数")
 5 try:
 6     num1 = int(num1)
 7     num2 = int(num2)
 8     result = num1 / num2
 9     print("%g"%result)
10 # 1.
11 except ValueError:
12     print("输出类型错误")
13 # 2.
14 except ZeroDivisionError:
15     print("除数不能为0")
16 # 3.把错误类型用元组来装
17 except(ValueError,ZeroDivisionError):
18     print("输入类型错误,除数不能为0")
19 # 将错误类型存储到变量里
20 except (ValueError) as result:
21     print(type(result))
22     print(result)
23 # 没有捕获到异常时,该代码块会执行
24 else:
25     print("没有异常")
26 # 最后,最终,执行的代码
27 finally:
28     print("谢谢使用")
29 
30 # ----------------------------------
31 # try与finally 结合使用
32 try:
33     print("今天下雨")
34 finally:
35     print("没带雨伞")

 二、自定义异常及抛出异常

  自定义异常

  GenderError

  class GenderError(Exception):

  继承于Exception或者BaseException

 

  抛出异常

  raise 异常对象

 1 # 自定义异常类: 继承于Exception 或者  BaseException
 2 class GenderError(Exception):
 3     def __init__(self,errMsg):
 4         self.errMsg = errMsg
 5 
 6 class Student():
 7     def __init__(self,name,gender):
 8         self.name = name
 9         self.__gender = None
10         # self.__gender = gender
11         self.setGender(gender)
12     def setGender(self,gender):
13         if gender == '' or  gender == '':
14             self.__gender = gender
15         else:
16            try:
17                raise GenderError("性别只能是男或者是女")
18            except GenderError as result:
19                print(result.errMsg)
20     def getGender(self):
21         return self.__gender
22 
23 stu = Student('汤姆-爱迪生','未知')
24 stu.setGender('半男不女')
25 # 打印性别
26 print(stu.getGender())

 

posted @ 2018-04-03 19:17  TiAmo_yu  阅读(280)  评论(0编辑  收藏  举报