python程序的堆栈跟踪模块traceback(python代码编辑器错误异常获取和处理)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/brytlevson/article/details/102727390

traceback该模块提供一个标准接口,用于提取、格式化和打印python程序的堆栈跟踪。它完全模仿了python解释器打印堆栈跟踪时的行为。当您希望在程序控制下打印堆栈跟踪时,这非常有用,例如在解释器周围的“包装器”中。
我们一般自己开发的简单代码编辑平台的错误机制可以捕获错误并进行一些处理.
一般将traceback和sys模块结合使用,这两个模块都市=是Python内置的模块
traceback.print_tb()
打印以限制来自回溯对象tb的堆栈跟踪项。如果省略或没有限制,则打印所有条目。如果文件被省略或没有,输出将转到sys.stderr;否则,它应该是一个打开的文件或类文件的对象来接收输出。

exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout)
打印异常信息并将堆栈跟踪项从回溯tb限制到文件。这与print_tb()的不同之处在于:(1)如果tb不是none,它将打印头回溯(最近的最后一次调用):;(2)它将在堆栈跟踪之后打印异常etype和值;(3)如果etype是syntaxerror,并且值具有适当的格式,它用插入符号打印出现语法错误的行,表示插入错误的大致位置。

traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=open(‘utils/kafka_app/consumer/tb.txt’, ‘w’))
也可以将这错误写到文件中去处理

traceback.print_stack()
此函数从调用点打印堆栈跟踪。可选的f参数可用于指定要启动的备用堆栈帧。可选的limit和file参数的含义与print_exception()相同。
#formatted_lines = traceback.format_exc().splitlines()
#print(formatted_lines)

exc_type, exc_value, exc_traceback = sys.exc_info()
a = traceback.format_exception(exc_type, exc_value, exc_traceback)
print(a)
[‘Traceback (most recent call last):\n’, ’ File’engine.exception.EngineException: 数据不存在,请检查路径\n’]

也可以自己封装一个错误处理机制,下面是思路

import logging
LOG = logging.getLogger(__name__)


class HandleErr(object):

    def __init__(self, body,  position, arguments):
        self.body = body
        self.position = position
        self.arguments = arguments

    def run_check(self, *args, **arguments):
        LOG.debug("Running %r with %r", self.position, arguments)
        try:
            self.body
        except AttributeError as ae:
            LOG.error("AttributeError")
            raise Exception('lines{}', ae).__format__(self.position)

        try:
            self.body
        except SyntaxError as se:
            LOG.error("SyntaxError")
            raise Exception('lines {}', se).__format__(self.position)

        try:
            self.body
        except Exception as ae:
            LOG.error("unknown parameters.")
            raise Exception('lines {}', ae).__format__(self.position)

        try:
            self.body
        except ImportError as ie:
            LOG.error("ImportError")
            raise Exception('lines {}', ie).__format__(self.position)

        try:
            self.body
        except Exception as all_exc:
            LOG.critical(
                "raised an unexpected exception",
                exc_info=True,
            )
            raise Exception(all_exc)

最后简单的做出的代码平台错误处理机制
{‘line’: ‘3’, ‘err’: ‘’}
{‘line’: ’ 4’, ‘err’: ‘image = i.ndvi() IndentationError: unexpected indent’}

猜你喜欢

转载自blog.csdn.net/brytlevson/article/details/102727390