python 错误处理:try..except..finally / logging / raise
admin
2023-07-23 20:21:58
0

python错误继承表:

https://docs.python.org/3/library/exceptions.html#exception-hierarchy


格式:

def 函数():

      try:  

             内容        ###正确输出

      except 错误表  in e:

              输出内容 ###错误输出

       finally:  

               输出内容   ##必定输出

print('END')        ##必定输出


#!/usr/bin/python
# -*- coding: utf-8 -*-

def foo(s):
    return 10 / int(s)

def bar(s):
    return foo(s) * 2

def main():
    try:
        bar('0')
    except Exception as e:
        print('Error:', e)
    finally:
        print('finally...')

        
main()

运行结果:

('Error:', ZeroDivisionError('integer division or modulo by zero',))
finally...


a.面对函数层层调用,try...except能捕捉得到。

b.类的子类错误也能捕捉得到,如捕捉ValueError错误,顺便也会把UnicodeError也捕捉了

 +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError



记录错误到日志文件:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import logging ###########记得导入模块

def foo(s):
    return 10 / int(s)

def bar(s):
    return foo(s) * 2

def main():
    try:
        bar('0')
    except Exception as e:
        logging.exception(e) #########模块函数使用
        
print ('haha')        
main()
print ('END')

运行结果:

haha
END


ERROR:root:division by zero
Traceback (most recent call last):
  File "/usercode/file.py", line 14, in main
    bar('0')
  File "/usercode/file.py", line 10, in bar
    return foo(s) * 2
  File "/usercode/file.py", line 7, in foo
    return 10 / int(s)
ZeroDivisionError: division by zero


当不用错误调试时,普通的程序出错会调用栈Traceback提示错误

def foo(s):
    return 10 / int(s)

def bar(s):
    return foo(s) * 2

def main():
    bar('0')

main()

运行结果:

Traceback (most recent call last):
  File "/usercode/file.py", line 13, in 
    main()
  File "/usercode/file.py", line 11, in main
    bar('0')
  File "/usercode/file.py", line 8, in bar
    return foo(s) * 2
  File "/usercode/file.py", line 5, in foo
    return 10 / int(s)
ZeroDivisionError: integer division or modulo by zero



抛出错误:raise

def foo(s):
    n = int(s)
    if n==0:
        raise ValueError('invalid value: %s' % s)
    return 10 / n

def bar():
    try:
        foo('0')
    except ValueError as e:
        print('ValueError!', e)
        raise

bar()

运行结果:

('ValueError!', ValueError('invalid value: 0',))


Traceback (most recent call last):
  File "/usercode/file.py", line 17, in 
    bar()
  File "/usercode/file.py", line 12, in bar
    foo('0')
  File "/usercode/file.py", line 7, in foo
    raise ValueError('invalid value: %s' % s)
ValueError: invalid value: 0



相关内容

热门资讯

百万粉网红账号被封,曾因宠物狗... 6月25日消息,网红黄一鸣的抖音主账号“鸣鸣酱”及女儿账号“闪闪酱”已双双显示“该用户被禁止关注”,...
宁夏一农药厂多名工人中毒?官方... 澎湃新闻记者 庄岸 实习生 刘雨柔6月25日,宁夏平罗县应急管理局就媒体报道的农药厂工人中毒事件,发...
衡水二中有学子高考710分 究...   衡水二中有学子高考710分  【衡水二中有学子高考710分】6月24日,河北省高考成绩公布,衡水...
风声|终于有地方取消中考选拔了... 作者丨贾拥民均衡研究所学术顾问浙江大学跨学科中心特约研究员时值全国中考季,中考分流与升学模式再度成为...
网友反映重庆有廉租房大量转租,... 极目新闻记者 邓波6月23日深夜,有网友在重庆网络问政平台上反映,重庆市云阳县稻场社区廉租房被大量出...
女童疑被生父女友杀害案将开庭:... 6月25日,红星新闻记者从3岁女童彤彤爸爸尹先生处得知,彤彤被害案即将开庭。传票显示,该案将于7月1...
美英法德“担忧”中国在台湾岛以... 澎湃新闻记者 杨文钦 于潇清6月25日,外交部发言人郭嘉昆主持例行记者会。路透社记者提问,美国、英国...
国防部:民进党当局蓄意制造紧张... 6月25日下午,国防部举行例行记者会,国防部新闻发言人张晓刚大校答记者问。记者:美日正在开展“勇敢之...
顶级阴阳!韩记者提问韩国队主帅... 2026年美加墨世界杯A组第三轮比赛中,韩国队在“打平即出线”的大好形势下,以0比1不敌南非队,场上...
苹果iOS 27版日历更新汇总... 6 月 25 日消息,科技媒体 9to5Mac 昨日(6 月 24 日)发布博文,报道称在 iOS ...