从零学习python - 10程序中的异常处理

* try: ... except: ... finally: ... 

# 当程序在运行时 可能会出现某些特殊情况导致程序运行停止 这个时候我们就需要抛出异常进行处理
# 如果不进行异常捕获的话 在出异常后的代码是不会接着运算的
# except 可以抛出多个异常进行处理 不同异常会根据不同except处理
# 当程序运行出错后,会自己抛出一个异常,这个异常会与下方except后的异常名比较,如果比较相同或辈分更小,则执行自己定义的异常下的处理办法
# 如果有多个(except 异常类型:)抛出 那么except Exception: 由于辈分最大 所以要放在最后 否则会捕捉所有抛出的异常
# 当except Exception: 捕捉异常但不知道是哪里出错 可以使用 except Exception as err: print(err) 进行打印err出错日志 err->相应异常类型对象
# 格式
'''
try:
    可能会出现异常的代码
except 异常类型1:
    如果出现异常则执行的代码
except 异常类型2...:
    如果出现异常则执行的代码
except Exception as err:
    如果出现的异常没有被catch 由于Exception辈分最大 所以会全部接收
finally:
    不管出不出异常都会执行的代码
'''

使用一个计算器方法测试一下

def calculator():
    try:
        a = int(input('输入第一个数:'))
        b = int(input('输入第二个数:'))
        per = input('输入运算符号(+ - * /):')
        result = 0

        if per == '+':
            result = a + b
        elif per == '-':
            result = a - b
        elif per == '*':
            result = a * b
        elif per == '/':
            result = a / b
        else:
            print('输入符号出错!')

        print(f'计算结果为:{result}')
    # 抛出数值异常 ValueError
    except ValueError:
        print('只能输入数字进行运算!')
    # 抛出x/0异常 ZeroDivisionError
    except ZeroDivisionError:
        print('输入数字不能为0!')
    except Exception as err:
        print('运行出错!', err)


# calculator()

在 try: 中的代码块如果出现异常,会根据我们下方抛出的不同异常进行捕获(ValueError - ZeroDivisionError - Exception),并且进行不同的异常处理.

'''
try:
    可能会出现异常的代码
except 异常类型1:
    出现异常如何处理的代码
else:
    如果try中没有出现异常则运行的代码
**注意:如果使用else则不能在try中出现return 否则else中代码不会执行
'''
# 下面函数中 如果更换文件地址会报异常 No such file or directory 并且报异常后不会执行else中的代码
# 如果没有异常 则try中代码运行完毕后 会接着运行else中的代码
def error_test():
    try:
        with open(r'E:\a1\copy1\test1\test1.txt', encoding='utf-8') as wStream:
            stream_read = wStream.read()
            print(stream_read)
            # return 1      # 加上return后 else中代码块显示 **This code is unreachable
    except Exception as err:
        print('出错了!', err)
    else:
        print('文件读取完毕!')


error_test()

* raise

# raise -> 在函数中我们可以在可能出异常的地方手动抛出一个异常
# raise 异常类型('提示信息')
def register():
    name = input('请输入用户名:')
    if len(name) < 6:
        # 如果输入的用户名小于6 则手动抛出异常
        raise Exception('用户名长度必须六位以上!')
    else:
        print('注册成功')
# 在当我们调用这个函数时 可以使用try ... except 来捕获这个异常
# 如果try:代码块中有raise关键字抛出异常 except就会捕获这个抛出的异常并进行异常处理
try:
    register()
except Exception as err:
    print('出错了!', err)  # 报错打印结果 -> '出错了! 用户名长度必须六位以上!'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OtnIOs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值