欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python——异常处理

程序员文章站 2024-03-18 12:26:04
...

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 当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... 语句进行异常处理,结构如下:

Python——异常处理

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")

所有的异常类总结:

Python——异常处理

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

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

 结果如下:

Python——异常处理

相关标签: 异常处理