美文网首页
Python异常

Python异常

作者: Biomamba生信基地 | 来源:发表于2023-07-13 00:28 被阅读0次

    写在前面

    在任何编程语言中都难免会遇到异常(报错),如何查看报错、理解报错、避免报错、捕获报错信息,都是我们需要去应对的环节。

    一、异常定义

    异常:当程序检测到错误时,Python解释器就无法继续执行了,此时会出现一些错误的提示,这就是所谓的”异常”,也就是我们常说的BUG
    例如最常见的bug,打错函数名称:

    pring("Biomamba")
    # 这时就会返回报错,并告诉发生错误的位置和具体原因
    

    NameError: name ‘pring’ is not defined

    二、异常捕获

    程序遇到bug时会存在两种情况:1、终止程序。2、提醒出现的bug并让整个程序继续运行。情况2就需要进行异常捕获,从而防止整个程序因为一些小bug而停止运行
    异常捕获基本语法:
    try:
    可能错误发生的代码 except:
    如果出现异常则执行的代码

    # 捕获异常(默认不区分异常类型):
    try:
        prinf('这条代码可能有异常')
    except:
        print("上条代码有异常,本条被输出")
    # 可以看到以上几行代码没有报错,输出的内容则是except后的语句
    ## 上条代码有异常,本条被输出
    
    # 捕获指定异常
    # 例如这里捕获变量名称未定义的异常"NameError"
    try:
        print(Biomamba)
    except NameError as aerror:
        print("Biomamba未被定义")
    # 可以看到错误成功被捕获,且备选方案被执行
    ## Biomamba未被定义
    
    # 捕获指定异常
    # 这里我们让异常不属于NameError:
    try:
        print(1/0)
    except NameError :
        print("Biomamba未被定义")
    # 可以看到错误没有被捕获,提示信息被输出,备选代码也没有被执行
    

    ZeroDivisionError: division by zero

    # 捕获多个异常,except(异常1,异常2)
    try:
        print(1/0)
    except(NameError,ZeroDivisionError):
         print("这是备选代码执行结果")
    # 可以看出备选代码被成功执行
    ## 这是备选代码执行结果
    
    # 捕获所有类型异常
    try:
        print(1/0)
        print(Biomamba)
    except Exception:
         print("这是备选代码执行结果")
    # 可以看出备选代码被成功执行
    ## 这是备选代码执行结果
    

    三、异常else

    除了except之外,还可以设置没有异常时选择执行的代码:

    try:
        print("这里没有异常")
    except:
        print("这是有异常后的执行结果")
    else:
        print("这是没有捕获到异常的执行结果")
    # 大家可以体会一下上述几行代码的执行逻辑
    ## 这里没有异常
    ## 这是没有捕获到异常的执行结果
    

    四、异常finally

    不管有没有异常,finally所包含的语句均会被执行:

    # 有异常
    try:
        1/0
        print("这里没有异常")
    except:
        print("这是有异常后的执行结果")
    else:
        print("这是没有捕获到异常的执行结果")
    finally:
        print("我在所有条件下都会被执行")
    # 大家可以体会一下上述几行代码的执行逻辑
    ## 这是有异常后的执行结果
    ## 我在所有条件下都会被执行
    
    # 无异常
    try:
        1+1
        print("这里没有异常")
    except:
        print("这是有异常后的执行结果")
    else:
        print("这是没有捕获到异常的执行结果")
    finally:
        print("我在所有条件下都会被执行")
    # 大家可以体会一下上述几行代码的执行逻辑
    ## 2
    ## 这里没有异常
    ## 这是没有捕获到异常的执行结果
    ## 我在所有条件下都会被执行
    

    五、异常传递

    异常是具有传递性的,可以用as来定义接收异常的变量:

    try:
        1/0
    except Exception as my_error:
        print("异常被成功捕获,下面是异常的具体信息:\n")
        print(my_error)
        # 可以看到除数异常被成功捕获
    ## 异常被成功捕获,下面是异常的具体信息:
    ## 
    ## division by zero
    
    # 但异常的捕获是一个局部变量,跳出异常捕获语句后捕获的异常变量就失效了:
    try:
        1/0
    except Exception as my_error:
        print("异常被成功捕获,下面是异常的具体信息:\n")
    
    print(my_error)
        # 可以看到除数异常被成功捕获,但my_error变量不存在
    NameError: name ‘my_error’ is not defined
    

    NameError: name ‘my_error’ is not defined

    往期回顾

    生信Python速查手册

    Python安装(Windows+Linux)

    Python的"Rstudio"——Pycharm

    码Python神器:jupyter notebook

    一文了解Python基础:字面量、注释、变量、类型、运算符

    Python判断语句

    Python循环语句

    Python函数与方法

    一文掌握Python数据容器

    Python函数进阶

    Python文件操作

    如何联系我们

    公众号后台消息更新不及时,超过48h便不允许回复读者消息,这里给大家留一下领取资料、免费服务器(有root权限的共享服务器,注册即送200¥)的微信号[Biomamba],方便各位随时交流、提建议(科研任务繁重,回复不及时请见谅)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:永久免费的千人生信、科研交流群

    大家可以阅读完这几篇之后添加
    给生信入门初学者的小贴士
    如何搜索公众号过往发布内容

    相关文章

      网友评论

          本文标题:Python异常

          本文链接:https://www.haomeiwen.com/subject/sgypudtx.html