• 技术文章 >后端开发 >Python教程

    python处理异常有哪些方式

    anonymityanonymity2019-06-17 09:38:05原创1503
    异常处理的用法:为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,

    1,如果错误发生的条件是可预知的,我们需要用if进行处理,在错误发生之前进行预防

    AGE=10
    while True:
        age=input('>>: ').strip()
        if age.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
            age=int(age)
            if age == AGE:
                print('you got it')
                break

    2,如果错误发生的条件是不可预知的,则需要用到try..except:在错误发生之后进行处理

    #基本语法为

    try:

    被检测的代码块

    except 异常类型:

    try中一旦检测到异常,就执行这个位置的逻辑

    #举例
    try:
        f=open('a.txt')
        g=(line.strip() for line in f)
        print(next(g))
        print(next(g))
        print(next(g))
        print(next(g))
        print(next(g))
    except StopIteration:
        f.close()

    五,try...except...的详细用法

      我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except

    1,异常类只能来处理指定的异常情况,如果非指定异常则无法处理

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e: # 未捕获到异常,程序直接报错
        print e

    2,多分支

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)

    3,万能异常Exception

    s1 = 'hello'
    try:
        int(s1)
    except Exception as e:
        print(e)

    4,多分支+Exception

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    except Exception as e:
        print(e)

    5,异常的其他机构(try...finally语法)

      try...finally语句无论是否发生异常都将会执行最后的代码。语法如下:

    try:
    <语句>
    finally:
    <语句>    #退出try时总会执行
    raise

     示例:

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    #except Exception as e:
    #    print(e)
    else:
        print('try内代码块没有异常则执行我')
    finally:
        print('无论异常与否,都会执行该模块,通常是进行清理工作')

    6,主动触发异常(raise语句)

      我们可以使用raise语句自己触发异常,raise语法格式如下:

    raise [Exception [, args [, traceback]]]

      语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。

    最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

    示例:

    一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。

    定义一个异常非常简单,如下所示:

    def functionName( level ):
        if level < 1:
            raise Exception("Invalid level!", level)
            # 触发异常后,后面的代码就不会再执行
    try:
        raise TypeError('类型错误')
    except Exception as e:
        print(e)

    7,自定义异常

      通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

      以下为与BaseException相关的实例,实例中创建了一个类,基类为BaseException,用于在异常触发时输出更多的信息。

      在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

    class Networkerror(BaseException):
        def __init__(self,msg):
            self.msg=msg
        def __str__(self):
            return self.msg
     
    try:
        raise Networkerror('类型错误')
    except Networkerror as e:
        print(e)

    8,断言:assert条件

    assert 1 == 1 
    assert 1 == 2

    9,总结try...except

    1,把错误处理和真正的工作分开来

    2,代码更易组织,更清晰,复杂的工作任务更容易实现

    3,毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了

    以上就是python处理异常有哪些方式的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Python
    上一篇:能够编译运行python的软件有哪些 下一篇:python的cmd命令行在哪里
    千万级数据并发解决方案

    相关文章推荐

    • pycharm自带python吗• python字典增加删除键值的方法• Python中记录循环次数的方法• 哪些网站全用python
    1/1

    PHP中文网