异常、调试

异常和调试
异常的概念

异常:
  一般情况下,在Python无法正常处理程序时就会发生一个异常
  异常是Python对象,表示一个错误
  当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
  可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句
  Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽
  因此,错误并不是凭空产生的,而是有意创建并抛出的
  创建一个错误类型抛出来
  能处理就处理,不知道怎么处理就往上抛
  raise语句如果不带参数,就会把当前错误原样抛出。此外,在except中raise一个Error,还可以把一种类型的错误转化成另一种类型:
  父类异常会把子类异常一网打尽

  try:
  <语句> #运行别的代码
  except <名字>:
  <语句> #如果在try部份引发了'name'异常
  except <名字>,<数据>:
  <语句> #如果引发了'name'异常,获得附加的数据
  else:
  <语句> #如果没有异常发生

  使用except而不带任何异常类型

  你可以不带任何异常类型使用except,如下实例:

  try:
  正常的操作
  ......................
  except:
  发生异常,执行这块代码
  ......................
  else:
  如果没有异常执行这块代码
  以上方式try-except语句捕获所有发生的异常。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。

  使用except而带多种异常类型
  你也可以使用相同的except语句来处理多个异常信息,如下所示:
  try:
  正常的操作
  ......................
  except(Exception1[, Exception2[,...ExceptionN]]]):
  发生以上多个异常中的一个,执行这块代码
  ......................
  else:
  如果没有异常执行这块代码

  try-finally 语句
  try-finally 语句无论是否发生异常都将执行最后的代码。
  try:
  <语句>
  finally:
  <语句> #退出try时总会执行
  raise

  try:
  fh = open("testfile", "w")
  try:
  fh.write("这是一个测试文件,用于测试异常!!")
  finally:
  print "关闭文件"
  fh.close()
  except IOError:
  print "Error: 没有找到文件或读取文件失败"
  当在try块中抛出一个异常,立即执行finally块代码。
  finally块中的所有语句执行后,异常被再次触发,并执行except块代码。

 异常的参数
  # 定义函数
  def temp_convert(var):
  try:
    return int(var)
    except ValueError, Argument:
  print "参数没有包含数字\n", Argument

  # 调用函数
  temp_convert("xyz");
  调试:
    是跟踪程序的执行过程,就是查看变量的值
    排查原因思路:在哪报错了,为什么报错
  print assert n != 0, 'n is zero!' assert的意思是,表达式n != 0应该是True,否则,后面的代码就会出错。
  程序中如果到处充斥着assert,和print相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert:
  关闭后,你可以把所有的assert语句当成pass来看。

方法3:logging
  这就是logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息
  import logging
  logging.basicConfig(level=logging.INFO)
  s = '0'
  n = int(s)
  logging.info('n = %d' % n)
  print 10 / n

posted on 2018-01-15 17:22  悬剑  阅读(114)  评论(0编辑  收藏  举报

导航