Python基础——异常分类与异常的处理(try-except语句)
程序员文章站
2022-03-16 10:50:44
异常=程序出错,错误分为程序错误、运行时刻错误和逻辑错误。Python中每一个一场都是类的实例,用异常对象(exception object)来表示异常情况。一、异常分类dir(_builtins_)查看异常类。类名描述BaseException所有异常的基类Exception常规异常的基类AttributeError对象不存在此属性IndexError序列中无此索引IOError输入/输出操作失败Keybo...
异常=程序出错,错误分为语法错误、运行时刻错误和逻辑错误。
Python中每一个一场都是类的实例,用异常对象(exception object)来表示异常情况。
一、异常分类
dir(_builtins_)查看异常类。
类名 | 描述 |
BaseException | 所有异常的基类 |
Exception | 常规异常的基类 |
AttributeError | 对象不存在此属性 |
IndexError | 序列中无此索引 |
IOError | 输入/输出操作失败 |
KeyboardInterrupt | 用户中断执行(通常输入ctrl+c) |
KeyError | 映射中不存在此键 |
NameError | 找不到名字(变量) |
SyntaxError | Python语法错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
ZeroDivisionError | 除(或取模)运算的第二个参数为0 |
二、处理异常
1、try-except语句
使用try-except语句捕捉异常,如果异常能够被捕捉到,则不会影响程序运行。
try:
正常代码
except 异常类型:
出现异常执行代码
2、空except子句和as
当无法判定异常是什么,使用空except子句,输出统一的错误,缺点是不知道错误的原因。
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
except:
print('something went wrong!')
使用as来将错误原因输出,as e相当于将捕捉到的这个异常对象命名为e,这个异常对象包含异常的具体信息。
a=[1,2,3]
try:
print(a[100])
print(‘hello’)
except IndexError as e:
print(type(e))
print(e)
3、多个except子句
except可以指定一个具体的异常,但如果try中抛出的异常不在except中,程序仍会终止运行,因此可以在一个try语句中,写多个except子句。
a=[1,2,3]
try:
print(a[100])
except IOError as e:
print(e)
except IndexError as e:
print(e)
4、一个except块捕捉多个异常
可以在一个except中指定多个异常,输出相同的错误。
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
except (ValueError,ZeroDivisionError):
print('invalid input!')
5、else语句
在try语句中,还可以搭配else,如果没有异常,则执行else语句里面的内容。
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
except (ValueError,ZeroDivisionError):
print('invalid input!')
else:
print('Aha,everthing is ok')
6、循环
在产生异常之后,程序就停止了,可以使用循环,一直连续输入,直到输入正确为止。
while True:
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
break
except ValueError:
print('please input a digit!')
except ZeroDivisionError:
print('the second number cannot be zero!')
break的位置不一定是在try里面,还可以在except或else里面,视情况而定。
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
except Exception as err:
print('something went wrong!')
print(err)
else:
break
alist=[1,2,3,4,5]
i=0
while True:
try:
print(alist[i])
except IndexError:
print('index error')
break
else:
i+=1
7、finally子句
不管是否发生异常,finally子句里面的内容都要被执行。
def finallyTest():
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
return 1
except Exception as err:
print(err)
return 0
finally:
print('it is finally clause')
result=finallyTest()
print(result)
本文地址:https://blog.csdn.net/hpwalk/article/details/107630385
上一篇: 第一章 需求概述