当前位置: 移动技术网 > IT编程>脚本编程>Python > Python基础——异常分类与异常的处理(try-except语句)

Python基础——异常分类与异常的处理(try-except语句)

2020年07月30日  | 移动技术网IT编程  | 我要评论
异常=程序出错,错误分为程序错误、运行时刻错误和逻辑错误。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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网