• python try except 出现异常时,except 中如何返回异常的信息字符串


    https://docs.python.org/3/tutorial/errors.html#handling-exceptions

    https://docs.python.org/3/library/exceptions.html#ValueError

    try:
        int("x")
    except Exception as e:
        '''异常的父类,可以捕获所有的异常'''
        print(e)
    # e变量是Exception类型的实例,支持__str__()方法,可以直接打印。 
    invalid literal for int() with base 10: 'x'
    try:
        int("x")
    except Exception as e:
        '''异常的父类,可以捕获所有的异常'''
        print(e.args)
    # e变量有个属性是.args,它是错误信息的元组。

    ("invalid literal for int() with base 10: 'x'",)try: datetime(2017,2,30)except ValueError as e: print(e) day is out of range for monthtry: datetime(22017,2,30)except ValueError as e: print(e) year 22017 is out of rangetry: datetime(2017,22,30)except ValueError as e: print(e) month must be in 1..12e = Nonetry: datetime(2017,22,30)except ValueError as e: print(e) month must be in 1..12e
    # e这个变量在异常过程结束后即被释放,再调用也无效
     Traceback (most recent call last): File "<input>", line 1, in <module>NameError: name 'e' is not defined

    errarg = None
    try:
        datetime(2017,22,30)
    except ValueError as errarg:
        print(errarg)
        
    month must be in 1..12
    errarg
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    NameError: name 'errarg' is not defined
    try:
        datetime(2017,22,30)
    except ValueError as errarg:
        print(errarg.args)

    # ValueError.args 返回元组

    ('month must be in 1..12',)
    message = None
    try:
        datetime(2017,22,30)
    except ValueError as errarg:
        print(errarg.args)
        message = errarg.args
        
    ('month must be in 1..12',)
    message
    ('month must be in 1..12',)
    try:
        datetime(2017,22,30)
    except ValueError as errarg:
        print(errarg.args)
        message = errarg
        
    ('month must be in 1..12',)
    message
    ValueError('month must be in 1..12',)
    str(message)
    'month must be in 1..12'

    分析异常信息,并根据异常信息的提示做出相应处理:

    try:
        y = 2017
        m = 22
        d = 30
        datetime(y,m,d)
    except ValueError as errarg:
        print(errarg.args)
        message = errarg
        m = re.search(u"month", str(message))
        if m:
            dt = datetime(y,1,d)
            
    ('month must be in 1..12',)
    dt
    datetime.datetime(2017, 1, 30, 0, 0)

    甚至可以再except中进行递归调用:

    def validatedate(y, mo, d):
        dt = None
        try:
            dt = datetime(y, mo, d)
        except ValueError as e:
            print(e.args)
            print(str(y)+str(mo)+str(d))
            message = e
            ma = re.search(u"^(year)|(month)|(day)", str(message))
            ymd = ma.groups()
            if ymd[0]:
                dt = validatedate(datetime.now().year, mo, d)
            if ymd[1]:
                dt = validatedate(y, datetime.now().month, d)
            if ymd[2]:
                dt = validatedate(y, mo, datetime.now().day)
        finally:
            return dt
        
    validatedate(20199, 16, 33)
    ('year 20199 is out of range',)
    201991633
    ('month must be in 1..12',)
    20181633
    ('day is out of range for month',)
    2018433
    datetime.datetime(2018, 4, 20, 0, 0)
  • 相关阅读:
    RxJava开发精要3-向响应式世界问好
    RxJava开发精要2-为什么是Observables?
    RxJava开发精要1-从.NET到RxJava
    为你的应用加速
    Android最佳性能实践(二)——分析内存的使用情况
    Android最佳性能实践(一)——合理管理内存
    Android 性能优化之使用MAT分析内存泄露问题
    给 Android 开发者的 RxJava 详解
    优化 Android 线程和后台任务开发
    资深谷歌安卓工程师对安卓应用开发的建议
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/11356475.html
Copyright © 2020-2023  润新知