异常except

一、手动抛出异常

x = 1
if x > 5:
    # 手动抛出一个异常,可以巧妙的运用这种方法,给调用者发送一个信息
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

# ------------------------------------------------------------

try:
    1 / 1
    # 1 / 0
except Exception:
    raise # 把捕获到的异常往上抛


# ---------------------------------------------------

class MyError(Exception):
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return repr(self.value)

try:
    raise MyError(2 * 2)
except MyError as e:
    print('My exception occurred, value:', e.value)

 

二、完整实例

def fun():
    try:
        f = open("a.txt", "w")  # 如果上面出错的话,这行代码就不会执行,f就不会被创建。
        # a = int("a")  # ValueError: invalid literal for int() with base 10: 'a'
        # i = 1 / 0  # ZeroDivisionError: division by zero

        # a = int("a")

    except Exception as e:
        raise Exception("错错错")  # 这里是显示抛出一条异常,可以是自定义异常。
        traceback.print_exc()  # 这条语句可以打印出错误类型
        print("出错了", e)  # 这条语句无法打印出错误类型。

    else:
        print("try语句通过!")  # 如果有异常,执行excpte,没有异常才执行else
        try:
            print("再次try")
            return "函数调用成功!"
        except ValueError as e:
            print(e)

    finally:
        print("最终都要执行的代码。用于释放资源。try异常没有被捕获,或者手动抛出了新的异常,都会执行这里的代码,也是最后一条代码了,如果函数调用者也不捕获错误,那么接下来就是程序崩溃")
        # 这里通常用于释放资源。比如,先打开了文件,后面的代码异常了,最后还是要关闭文件释放资源。
        f.close()  # 如果上面的f没有创建的话,这里就会出错。UnboundLocalError: loca……

   print('try 以外的代码,如果try异常被捕获了,才会执行后面的代码,否则不会执行')
print(fun())

  两个例子;

def spam(divideBy):
    try:
        return 42 / divideBy
    except ZeroDivisionError:
        # print('Error: Invalid argument.')
        pass

print(spam(2))  # 21.0
print(spam(12))  # 3.5
print(spam(0))  # None
print(spam(1))  # 42.0

def spam(divideBy):
    return 42 / divideBy

try:
    print(spam(2))  # 21.0
    print(spam(12))  # 3.5
    print(spam(0))  # 不能输出
    print(spam(1))  # 不能输出
except ZeroDivisionError:
    print('Error: Invalid argument.')

 

def fun():
    try:
        1/0
    finally:
        print("最终都要执行的代码。")

    print('这条语句不会输出,因为上面没有excpt')

try:
    fun()
except Exception as e:
    print(e)

 

posted @ 2020-10-07 13:39  老谭爱blog  阅读(141)  评论(0)    收藏  举报