2.1 - 错误、异常和警告

2.1.1 分类

  语法错误:又称为 解析错误,写出了不符合python语法格式的代码会报:SyntaxError: invalid syntax。

  警告:警告消息通常用于提示用户一些错误或者过时的用法,当这些情况发生时我们不希望抛出异常或者直接退出程序。警告消息通常写入 sys.stderr,对警告的处理方式可以灵活的更改。

  异常:包含 TypeError、ZeroDivisionError、MemoryError等内置异常 和 自定义异常等。

2.1.2 异常的语法

# try - except - else

try:
    i = 1 / 0
except TypeError:
    raise RuntimeError('捕获到一个类型异常') 
except:
    raise RuntimeError('捕获到一个异常')
else:
    print('这段代码没有异常被捕获')

  else分支的触发条件:如果try中没发生异常即:没有任何except发生过,则执行此else分支。

  except:如果except中没有指定异常类型,则会捕获所有类型的异常; 如果except指定了异常类型,则只能捕获指定类型的异常;如果要捕获多个类型的异常,则可以使用 元组 ;如果一个异常没有  与任何的except匹配,则会报错

  raise:主动抛出异常

 

class A(object):

    def test(self, x):
        try:
            res = 1 / x
            return -1
        except:
            print('发生了一个异常')
        finally:
            print('fianlly 分支执行了')
            return -2


a = A()
a.test(1)
print('---------------')
print(a.test(0))

  finally子句:在【调用return结束之前】必须先执行finally分支;如果 finally子句中包含一个return语句,则最终返回值将来自finally子句中return的返回值,而非try子句中的return返回值。

 

2.1.3 断言

  assert断言:类似于条件判断语句,不符合条件返回断言异常AssertionError。

  【assert 条件,自定义断言日志】

class A(object):

    def test(self, x):
        try:
            res = 1 / x
            return -1
        except:
            print('发生了一个异常')
        finally:
            print('fianlly 分支执行了')
            return -2

    def test_assert(self, num):
        assert num > 0, f'{num} should be a positive number'  # 断言
        # print('num是一个正数')


a = A()
# 测试断言
a.test_assert(0)

 

2.1.4 自定义异常的两种方式

# 自定义异常方式一:重写 __init__ 和 __str__ 魔术方法
class MyError:
    def __init__(self, message=''):
        self.message = message

    def __str__(self):
        return str(self.message)


# 自定义异常方式二:直接继承 Exception 类
class MyError2(Exception):
    pass


print(MyError("发生了一个异常"))
print(MyError2("发生了一个异常"))

 

 

 

  

posted @ 2024-01-19 18:52  橘子葡萄火龙果  阅读(22)  评论(0编辑  收藏  举报