Python 异常处理和捕获

发布时间: 更新时间: 总字数:512 阅读时间:2m 作者: 分享 复制网址

python中用try来处理程序异常的集中常用方法

使用

如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:

try:
    # Some Code....

except:
    # optional block
    # Handling of exception (if required)

except <异常名> as <数据>:
    <处理异常语句>
    raise

else:
    # execute if no exception

finally:
      # Some code .....(always executed)

说明:

  • exception 的 stack 要从上往下看
  • logging.exception(e) 可打印 stack 信息
  • raise 语句如果不带参数,就会把当前错误原样抛出
  • 若不知道 Some Code 在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,所以在 except ...... 这句应怎样来写呢?
  • finally 无论是否有异常都会执行,在 return 前执行

总结了以下至少3个方法:

raise from 显示异常链

try:
    raise ValueError
except Exception as e:
    raise IndexError from e
"""
Traceback (most recent call last):
  File "raisefrom.py", line 3, in <module>
    raise ValueError
ValueError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "raisefrom.py", line 5, in <module>
    raise IndexError from e
IndexError
"""

捕获所有异常

try:
    a=b
    b=c
except Exception,e:
    print Exception,":",e

采用traceback模块查看异常

import traceback
try:
    a=b
    b=c
except:
    traceback.print_exc()

采用sys模块回溯最后的异常

import sys
try:
    a=b
    b=c
except:
    info=sys.exc_info()
    print info[0],":",info[1]

高级

保存到文件

但是,如果你还想把这些异常保存到一个日志文件中,来分析这些异常,那么请看下面的方法:把traceback.print_exc()打印在屏幕上的信息保存到一个文本文件中

try:
    a=b
    b=c
except:
    f=open("c:log.txt",'a')
    traceback.print_exc(file=f)
    f.flush()
    f.close()

非异常时,获取调用堆栈

import traceback

traceback.print_stack()
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数