python之路---异常处理

何为异常

异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常没有被应用程序处理,该异常就会被抛出,程序的执行也随着终止

异常包含三个部分:

      1.traceback 异常的最终信号

      2.异常的类型

      3.异常的信息

错误分为两大类:

      1.语法上的错误

      2.逻辑上的错误

 为什么要进行异常处理

   避免程序因为异常而崩溃,在应用程序内处理异常,以增强程序的健壮性

如何捕获异常

 已知异常类型时

x = [1,2,3,4]
try:
    print(x[5])
except IndexError:
    print('超出索引长度')


try:
    print(x[5])
except EOFError:   #异常类型不匹配,仍然抛出异常
    print('超出索引长度')

此外还可以通过多分支,捕获多种异常

x = [1, 2, 3, 4]
try:
    yyy  # 捕获到异常就直接执行except
    print(x[5])
except IndexError as e:
    print('超出索引长度:', e)

except NameError as e:
    print('变量未定义:', e)


# 或者合起来写
x = [1, 2, 3, 4]
try:
    yyy  # 捕获到异常就直接执行except后面的代码不会执行
    print(x[5])
except (IndexError,NameError) as e:
    print(e)

万能异常:Exception

x = [1, 2, 3, 4]
try:
    yyy
except Exception as e:
    print(e)

else 及 finally

try:
    print('r' + 1)
except Exception as e:
    print(e)
else:
    print('必须放到后面,else的子代码块会在被检测的代码没有抛出异常的情况下执行')
finally:
    print('无论被检测的代码有没有抛出异常,finally的子代码块都会执行')  
# 通常用于回收资源,如f.close()
print('other code')

自定义异常:当python内置的异常无法满足我们的需求时,我们就可以自定义异常

class Myerror(BaseException):
    def __init__(self, msg):
        super().__init__()
        self.mag = msg

    def __str__(self):
        return '%s'%self.mag


name=input('请输入用户名:').strip()
if not name.isalnum():
    raise Myerror('用户名只能包含数字和字母')
print('合法!')

  

猜你喜欢

转载自blog.csdn.net/ltfdsy/article/details/82114846