Python3-初步认识错误和异常识别

Python3-初步认识错误和异常识别

Python 有两种错误很容易辨认:语法错误异常

Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

1. try/expect

在这里插入图片描述
单异常处理:

# 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。
# 最多只有一个分支会被执行。
while True:
    try:
        x = int(input("请输入一个数字: "))
        break
    except ValueError:
        print("您输入的不是数字,请再次尝试输入!")

多异常处理:

import sys

try:
    f = open('a.txt')
    s = f.readline()      # 读取首行
    print(s)
    i = int(s.strip())    # 去除字符串首尾指定字符,默认去除首位空格
    print(i)
except OSError as err:    # err为异常变量
    print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
except:    # try语句无异常时执行
    print("Unexpected error:", sys.exc_info()[0])
    raise

2. try/except…else

在这里插入图片描述

import sys
print(sys.argv[0:])
for arg in sys.argv[0:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print('can not open', arg)
    else:
        print(arg, 'has', len(f.readlines()), 'lines')
        f.close()

在这里插入图片描述

try:
    f = open("b.txt", "r")
except FileNotFoundError:
    print('can not open b.txt')
else:
    print('b.txt has', len(f.readlines()), 'lines')
    f.close()

在这里插入图片描述

3. try-finally 语句

如果一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后被抛出。

上述理解: 一个异常由try子句抛出,但是不属于任何一个except异常处理,而else是在try子句没有异常的时候执行,这时异常会在finally子句执行后抛出。
在这里插入图片描述

try:
    f = open("b.txt", "r")
except FileNotFoundError:
    print('can not open b.txt')
else:
    print('b.txt has', len(f.readlines()), 'lines')
    f.close()
finally:
    print('无论有没有异常都会执行。')

在这里插入图片描述

4. 抛出异常

抛出异常的格式raise [Exception [, args [, traceback]]]
在这里插入图片描述

# 满足条件,则引发(抛出)异常。
x = 10
if x > 5:
    raise Exception('x 不能大于5. x的值为:{}'.format(x))

在这里插入图片描述

# 抛出异常但不处理该异常
try:
    raise NameError('haha')    # 引发异常
except NameError:              # 异常名是NameError,就执行以下异常代码
    print('xixi')              # 异常代码
    raise

5. 用户自定义异常

可以通过创建一个新的异常类来拥有自己的异常。

异常类继承自 Exception 类,可以直接继承,或者间接继承。

class myerror(Exception):    # Exception是异常基类,myerror是异常派生类
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)

try:
    raise  myerror(3*3)      # 引发异常派生类
except myerror as e:         # 异常类myerror的异常代码
    print('My exception occurred, value:', e.value)
# 基础类(父类)
class Error(Exception):
    pass
# 派生类1(子类)
class InputError(Error):
    def __init__(self, expression, message):   # expression和message是类内定义的变量
        self.expression = expression
        self.message = message
# 派生类2(子类)
class TransitionError(Error):
    def __init__(self, previous, next, message):   # previous、next、message是另一个类内定义的变量
        self.previous = previous
        self.next = next
        self.message = message

本文是从初学者的角度去解释的python中的异常机制,在生产环境中的具体使用需具体分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值