自学python_12 异常

一般的语法错误都能在编译器中提示出来,但是下面代码里的除零错误。

def chu(a,b):
    return a / b
print(chu(1,2))
# 0.5
print(chu(1,0))
# ZeroDivisionError: division by zero

像这种可能出现错误的代码,可以用try进行检测,有异常出现,就进入except里(可以加多个except,也可以声明except的类型),后面可以加finally,里面是无论有没有异常都会执行的代码,最后可以加else,else是没有任何异常时执行的代码。

def chu():
    try:
        a = int(input("num a :"))
        b = int(input("num b :"))
        res = a / b
    except ValueError:
        print("必须输入数字!")
    except ZeroDivisionError:
        print("除数不能为零!")
    except:
        print("未知错误!")
chu()
# 输入 122 a 
# 必须输入数字!
# 输入 122 0
# 除数不能为零!

多个exception的处理顺序:

def chu():
    try:
        a = int(input("num a :"))
        b = int(input("num b :"))
        res = a / b
        with open(r"C:\Users\向锦辉\Desktop\pytest\1.txt",'r') as rstream:
            print(rstream.read())
    except ValueError:
        print("必须输入数字!")
    except ZeroDivisionError:
        print("除数不能为零!")
    except Exception as err:
        print("出错了!错误原因:{}".format(err))
    except FileNotFoundError:
        print("文件找不到!")
chu()
# 输入 1 1
# 输出 出错了!错误原因:错误原因:[Errno 2] No such file or directory: 'C:\\Users\\Desktop\\pytest\\1.txt'

这里是从上到下按步骤查找exception,exception中包含了filenotfounderror,所以当执行到exception时就会把异常认定为exception,从而不会进行下面的判断了,如果把在后面加上 as err就会把异常的类型赋值给err,可以把发生的错误记录。所以在使用异常操作时,要把大类的异常向下放,把由大类异常派生出的小类往上放。


注意: try中的某些变量在finally中可能无法使用,因为try,finally中的语句相当于是两个模块中的,就像一个函数和另一个函数里的变量一样。如果try和catch语句中如果要同时使用一个变量的话,可以先在他们外部声明一下。

抛出异常:

def resister():
    username = input("输入用户名:")
    if len(username) < 6:
        raise Exception("用户长度必须6为以上!")
    else:
        print("输入的用户名是:",username)
try:
    resister()
except Exception as err:
    print(err)
    print("注册失败!")
else:
    print("注册成功!")

用 raise 将异常抛出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值