python3 异常处理

1.错误:

(1)语法错误:在解释器中如果不把python语法修正好,则不能run

(2)逻辑错误

2.异常是由程序的错误引起的,语法上面的错误跟异常无关,必须在程序执行前修正。

异常:在运行代码过程中遇到的任何错误,带有error字样的,都是异常;

异常处理:我们在对代码中所有可能会出现的异常,进行的处理;

异常处理情况:

(1)可预知:

 1 a=input("》》》》》》:")
 2 b=input("》》》》》》:")
 3 while True:
 4     if a.isdigit() and b.isdigit():
 5         if b=="0":
 6             print("我要终止了哈")
 7             break####终止了
 8         else:
 9             print(int(a)/int(b))#b不等于0就死循环了
10 
11 
12 ######################
13 》》》》》》:90
14 》》》》》》:0
15 我要终止了哈
View Code

 (2)不可预知,则使用try。。。。。。except。。

 1 a=input("》》》》》》:")
 2 b=input("》》》》》》:")
 3 try:
 4         print(int(a)/int(b))
 5 except ZeroDivisionError as e :
 6     print(e)
 7 
 8 ######################
 9 》》》》》》:90
10 》》》》》》:0
11 division by zero
View Code

 

3.什么时候用异常处理:

        只有在某些无法预知的情况下才使用,但是应该尽量避免使用,多了会导致程序的可读性变差。

4.多分支异常:

 1 s1 = "h"
 2 try:
 3     a=int(s1)
 4 except IndexError as e:
 5     print(e)
 6 except KeyError as e:
 7     print(e)
 8 except ValueError as e:
 9     print(e)
10 
11 
12 ########################
13 invalid literal for int() with base 10: 'h'
View Code

 5.万能异常:

1 s1 = "h"
2 try:
3     a=int(s1)
4 except Exception as e:
5     print(e)
6 
7 
8 ####################
9 invalid literal for int() with base 10: 'h'
View Code

 

6.异常捕获完整语法:

try:
    # 尝试执行的代码
    pass
except 错误类型1:
    # 针对错误类型1,对应的代码处理
    pass
except 错误类型2:
    # 针对错误类型2,对应的代码处理
    pass
except (错误类型3, 错误类型4):
    # 针对错误类型3 和 4,对应的代码处理
    pass
except Exception as result:
    # 打印错误信息
    print(result)
else:
    # 没有异常才会执行的代码
    pass
finally:
    # 无论是否有异常,都会执行的代码
    print("无论是否有异常,都会执行的代码")——————————————————————最后一步是都会执行的
View Code

   try。。。。。。。。else和if。。。。。。。。。。else是没有任何关系的。

   else只有在try中代码块没有异常的时候才会执行的代码;实际上大部分语言的异常处理都没有 else 块,它们确实是将 else 块的代码直接放在 try 块的代码的后面的,因为对于大部分场景而言,直接将 else 块的代码放在 try 块的代码的后面即可。

   finally无论是是否有异常,都会被执行的代码。不管 try 块中的代码是否出现异常,也不管哪一个 except 块被执行,甚至在 try 块或 except 块中执行了 return 语句,finally 块总会被执行。

 

7.异常的传递

  异常的传递——当函数/方法出现异常,会将异常传递给函数/方法的调用一方;

  当主程序中没有对异常进行处理,才会报错。

def A():
    return  int(input("请输入一个整数:"))
def B():
    return A()
#利用异常的传递性,在主程序中捕获异常
try:
    print(B())
except Exception as e:
    print(e)

###################
请输入一个整数:dcg
invalid literal for int() with base 10: 'dcg'
View Code

 

8.主动抛出异常(抛出raise异常)

  根据应用程序特有的业务需要上面主动跑出异常;

    (比如输入密码大于6小于10,如果密码长度小于6大于1哦则跑出异常。)

  • 创建 一个 Exception 的 对象
  • 使用 raise关键字 抛出 异常对象
__author__ = 'Administrator'
def input_pwd():
    #  1.提示用户输入密码
    pwd=input("请输入您的密码:")
    #  2.判断密码长度,返回用户输入的面
    if 6<=len(pwd)<=8:
        return pwd
    else:
        #  3.如果<8主动抛出异常
        print("主动抛出异常")
        #  创建异常对象
        ex=Exception("密码规则错误,请重新输入")
        #  主动抛出异常
        raise ex
print(input_pwd())

###########################
请输入您的密码:1234
Traceback (most recent call last):
  File "E:/Python/_demo/密码异常/密码异常.py", line 15, in <module>
    print(input_pwd())
  File "E:/Python/_demo/密码异常/密码异常.py", line 14, in input_pwd
    raise ex
Exception: 密码规则错误,请重新输入
主动抛出异常
View Code

 

 

 

 

 

 

 

 

 

posted @ 2018-09-29 18:33  小猪猪猪  阅读(120)  评论(0)    收藏  举报