Python进阶(25)—使用try-except语句捕获和处理异常

◎知识点

  1. 使用try-except语句捕获和处理异常


◎脚本练习

"""
    程序在运行期间产生异常时,为了让程序能够继续运行,可以对抛出的异常实例对象进行捕获和处理,
这是通过try-except语句实现的:
    把可能会产生异常的代码放在try语句块中以捕获异常实例对象,
    把处理异常的代码放在由若干个except子句组成的except语句块中。
    
try-except语句的语法格式为:
    try:
        可能会产生异常的代码
    except 异常类对象1:
        当前except子句处理异常的代码
    except 异常类对象2:
        当前except子句处理异常的代码
    ...
    except 异常类对象n:
        当前except子句处理异常的代码
"""

try:
    result = 1 / 2
    # result = 1 / 0
    # result = int('abc')
    print(result)
except ImportError:
    print("导入错误")
except ZeroDivisionError:
    print("0不能作为除数")
except TypeError:
    print("类型错误")
print("结束")

"""
    如果抛出的异常实例对象所对应的类对象是except子句中异常类对象的子类,那么该except子句也会被匹配
"""

try:
    result = 1 / 0
    print(result)
except ArithmeticError:
    print("数学错误")

"""
    当try语句块中产生异常时,会从上到下依次查找是否有匹配的except子句,只要找到一个匹配的
except子句,则不会再查找剩余的except子句。因此,要注意各个except子句的顺序
"""

try:
    result = 1 / 0
    print(result)
except ZeroDivisionError:
    print("0不能作为除数")
except ArithmeticError:
    print("数学错误")
print("结束")

try:
    result = 1 / 0
    print(result)
except ArithmeticError:
    print("数学错误")
except ZeroDivisionError:
    print("0不能作为除数")
print("结束")

"""
    当多个异常类对象对应的异常处理代码完全相同时,可以把这些异常类对象以元组的形式放在一个except子句中
"""

try:
    result = 1 / 0
    print(result)
except TypeError:
    print("运行出错了")
except ZeroDivisionError:
    print("运行出错了")
except ValueError:
    print("运行出错了")

try:
    result = 1 / 0
    print(result)
except (TypeError, ZeroDivisionError, ValueError):
    print("运行出错了")

"""
    如果想在匹配到的except子句中访问异常实例对象,可以在except子句中的冒号添加关键字as和一个变量 
"""

try:
    result = 1 / 0
    print(result)
except ZeroDivisionError as err:
    print(type(err))    # <class 'ZeroDivisionError'>
    # 类对象ZeroDivisionError实现了特殊方法__str__()
    print(err)          # division by zero

try:
    result = int('abc')
    print(result)
except (TypeError, ZeroDivisionError, ValueError) as err:
    print(type(err))    # <class 'ValueError'>
    # 类对象ValueError实现了特殊方法__str__()
    print(err)          # invalid literal for int() with base 10: 'abc'

"""
    为了在except语句块中将所有的异常对象尽可能地覆盖到,可以将最后一个except子句中的
异常类对象指定为Exception(内置的异常类对象和自定义的异常类对象都继承自Exception),
或者在最后一个except子句中不指定异常类对象
"""

try:
    result = 1 / 0
    print(result)
except (TypeError, ValueError):
    print("类型错误或值错误")
# except:
except Exception:
    print("其它错误")

Python进阶(25)—使用try-except语句捕获和处理异常


◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_advanced/try_except.py

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/5469.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注