Python如何输出异常信息(行号)

 更新时间:2023年08月11日 11:30:10   作者:柳鲲鹏  
这篇文章主要介绍了Python如何输出异常信息(行号)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Python输出异常信息

如下:

 
import traceback
try:
except Exception, e:
    print sys._getframe().f_lineno, 'str(e):\t\t', str(e)
    print sys._getframe().f_lineno, 'repr(e):\t', repr(e)
    print sys._getframe().f_lineno, 'e.message:\t', e.message
    print sys._getframe().f_lineno, 'traceback.print_exc():'; traceback.print_exc()
    print sys._getframe().f_lineno, 'traceback.format_exc():\n%s' % traceback.format_exc()
# 关键是这一句
traceback.print_exc()

python代码测试中输出错误信息

python输出错误信息的方法

1、try -except + raise

​最为常见的捕捉错误信息形式,其中有try - except, try - except-finally, raise格式

(1)try-except:

语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理,如果你不想在异常发生时结束你的程序,只需在try里捕获它。

 try:
     self.cursor.execute(select_plan_info_sql, params)
     for x in self.cursor.fetchall():
         plan.append({     
         })
 except DatabaseError as ex:
     app_log.error("database error: %s, sql: %s, traceback: %s",
                   ex, self.cursor.statement, traceback.format_exc())

(2)try-finally + try-except-finally:

finally 语句无论是否发生异常都将执行最后的代码。

try:
    f1 = open("test.txt","rU")
    for i in f1:
        i=i.strip()
        print(i)
except Exception as E_results:
    print("捕捉有异常:",E_results)
finally: #finally的代码是肯定执行的,不管是否有异常,但是finally语块是可选的。
    f1.close
    print("我不管,我肯定要执行。")

(3)raise(抛出错误)

我们也可以自己定义错误类型,遇到自认为是错误情况时,抛出错误实例。用raise语句可以将一个错误实例抛出。

# 实例1
def fn(s):
    n = s
    if n == 0:
        raise MyError('invalid value: %s' % s)
    return 9 / n
fn(0)
# 实例2
try:
     self.cursor.execute(select_plan_info_sql, params)
     for x in self.cursor.fetchall():
         plan.append({     
         })
 except DatabaseError as ex:
     app_log.error("database error: %s, sql: %s, traceback: %s",
                   ex, self.cursor.statement, traceback.format_exc())
     raise HTTPError(500)

raise 和 try 的区别:

  • raise语句负责抛出错误信息,而try语句负责检查是否有错误信息并捕获信息。
  • 若没有try语句,那么错误信息就要让python的解释器来处理。

raise可以转换错误类型:

  • raise语句也可以不带参数,此时按原错误信息抛出。
  • 此外,在except中raise一个Error,还可以把一种类型的错误转化成另一种类型
try:
    10 / 0
except ZeroDivisionError:
    raise ValueError('input error!')

2、self参数

在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。其作用相当于java中的this,表示当前类的对象,可以调用当前类中的属性和方法。

self中存在一个self.fail方法,即当输入的情况不符合时,将会使用self.fail(message=u"message")

注:u是unicode格式,表示有中文字符时候将自动转换成中文,否则将以unicode形式输出

def put(self):
    app_id = self.get_argument("app_id").strip()
    if not app_id:
        self.fail(message="Invalid app_id")
    self.cache.sadd(settings.ALLOWED_APPS_KEY, app_id)
    self.success()

3、return tuple

​ 当在测试中有多个情况多个值,并且在另一个方法中调用这些情况的时候,可以考虑使用这种方法,减少代码量

def int_cond_judge(temp_para, para, list_num):
     if list_num is None:
         list_num = []
     if not temp_para:
         return None, "{} is empty".format(para)
     if isinstance(temp_para, (unicode, str)) and not temp_para.isdigit():
         return None, "{} format is wrong".format(para)
     temp_para = int(temp_para)
     if list_num and temp_para not in list_num:
         return None, "{} is out of range".format(para)
     return temp_para, None
#	上一步中各个情况的return返回值为tuple
def return_value(self, temp_para, para, list_num=None):
     value, msg = int_cond_judge(temp_para, para, list_num)
     if msg:
         self.fail(message=msg)
     return value

4、list里面加入错误信息

​ (函数内部引用加值)

5、断言

​ 这个方法一般使用在测试中,

self.assertEqual(a, b),如果a和b不相等(输出为false),则自动抛出异常

#   list
json_list = requests.get(self.url_list, self.params).json()
self.assertEqual(json_list['status'], 0)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python matplotlib包和gif包生成gif动画实战对比

    Python matplotlib包和gif包生成gif动画实战对比

    使用matplotlib生成gif动画的方法相信大家应该都看到过,下面这篇文章主要给大家介绍了关于Python matplotlib包和gif包生成gif动画对比的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Python数据可视化探索实例分享

    Python数据可视化探索实例分享

    这篇文章主要介绍了Python数据可视化探索实例分享,数据可视化是指用图形或表格的方式来呈现数据,关于更多相关介绍需要的小伙伴可以参考下面文章的具体内容
    2022-05-05
  • python爬虫之生活常识解答机器人

    python爬虫之生活常识解答机器人

    这篇文章主要介绍了python爬虫之生活常识解答机器人,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • tensorflow查看ckpt各节点名称实例

    tensorflow查看ckpt各节点名称实例

    今天小编就为大家分享一篇tensorflow查看ckpt各节点名称实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python网络编程 使用UDP、TCP协议收发信息详解

    python网络编程 使用UDP、TCP协议收发信息详解

    这篇文章主要介绍了python网络编程 使用UDP、TCP协议收发信息详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 一文搞懂​​​​​​​python可迭代对象,迭代器,生成器,协程

    一文搞懂​​​​​​​python可迭代对象,迭代器,生成器,协程

    这篇文章主要介绍了一文搞懂​​​​​​​python可迭代对象,迭代器,生成器,协程,微博吱嘎部分围绕主题展开详细介绍,需要的小伙伴可以参考一下
    2022-05-05
  • 利用Python进行金融数据分析的全过程

    利用Python进行金融数据分析的全过程

    金融数据分析在现代金融行业中扮演着至关重要的角色,通过使用Python编程语言,我们可以对大量金融数据进行处理、分析和可视化,从而获得有价值的洞察,本篇文章将介绍如何使用Python进行金融数据分析,需要的朋友可以参考下
    2024-08-08
  • 深入探讨Python中弱引用机制与应用

    深入探讨Python中弱引用机制与应用

    在Python编程中,弱引用(Weak Reference)是一种特殊的引用方式,本文将深入探讨Python的弱引用机制,介绍其用法、原理及实际应用场景,希望对大家有所帮助
    2024-03-03
  • python定时任务apscheduler的详细使用教程

    python定时任务apscheduler的详细使用教程

    APScheduler的全称是Advanced Python Scheduler,它是一个轻量级的 Python定时任务调度框架,下面这篇文章主要给大家介绍了关于python定时任务apscheduler的详细使用教程,需要的朋友可以参考下
    2022-02-02
  • Python 中pandas索引切片读取数据缺失数据处理问题

    Python 中pandas索引切片读取数据缺失数据处理问题

    pandas是一个Python软件包,提供快速,灵活和富于表现力的数据结构,旨在使使用“关系”或“标记”数据既简单又直观。这篇文章主要介绍了pandas索引切片读取数据缺失数据处理,需要的朋友可以参考下
    2019-10-10

最新评论