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

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

相关标签: Python