Python——异常处理

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

常见的异常如下:

1.
# print(a)   
# NameError

2.
# print(10/0) 
# ZeroDivisionError (除0错误)
3.
# 索引异常: IndexError
# str = 'hello'
# print(str[6])
4.
# 字典key值错误: KeyError
# d = dict(a=1, b=2)
# 如果key值不存在, 返回None;
# print(d.get('c'))
# print(d.get('c', "key不存在"))
# # print(d['c'])
5.
# 缩进异常: IndentationError
# age = 18
# if age > 18:
#                     print('adult')
# else:
#     print("not adult")
#         print('dhchfdhvf')

1.异常处理

通常使用try...except... 语句进行异常处理,结构如下:

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

例如:

try:
    # try里面写的是要执行的代码;
    print(a)
    print(10/0)
    # 此处不会打印westos, 因为上一行代码执行报错;
    print('westos')
except NameError:
    # try里面的代码如果有异常/错误, 才会执行的代码;
    # except NameError:, 只对NmaeError错误进行处理;
    print("错误")
else:
    # 判断是否有异常, 如果没有, 执行此代码;
    print("运行成功")
finally:
    # 有异常和没有异常都会执行的代码;
    print("检测finally的作用")
import sys

try:
    10/0
    f = open('passwd')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
except:
    # sys.exc_info(): 获取异常信息
    print(sys.exc_info())
    print("Unexpected error:", sys.exc_info()[0])
    # 抛出异常, 本来可以正确执行的代码让报错;
    raise

这里用到一个raise 它可以抛出异常,使处理了的异常报出错误,下面会在触发异常中详细介绍。

异常处理的一些其它用途: 除了处理实际的错误条件之外,对于异常还有许多其它的用处。在标准 Python 库中 一个普通的用法就是试着导入一个模块,然后检查是否它能使用。导入一个并不存在的 模块将引发一个 ImportError 异常。     你可以使用这种方法来定义多级别的功能――依靠在运行时哪个模块是有效的,或支持多 种平台 (即平台特定代码被分离到不同的模块中)。

2.触发异常

使用raise语句自己触发异常, raise语法格式如下:               

raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种, args 是自已提供的异常参数。

例子如下:

# 录入学生信息的系统;
# 对录入的信息进行校验: 1). len(姓名)>2  2). 0<age<150

name = input("姓名:")
if len(name) < 2:
    raise NameError("姓名必须大于2位")
age = int(input("年龄:"))
if age < 0 or age >= 150:
    raise NameError("年龄必须在0<age<150")

所有的异常类总结:

下面有一个用户中断执行的案例,实现对从开始输入的数字到终止时之间输入的数字求和:

# 用户可以一直输入数字, 当按ctrl+c之后计算所有数的和;
result = 0
while True:
    try:
        num = int(input('Num:'))
        # result = result +  num
        result += num
    #  用户中断运行的异常; ===捕获异常
    except KeyboardInterrupt:
        print("运行结果:", result)
        break

 结果如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值