【问题标题】:How to get the line number on which exception or error occurred in Python?如何获取 Python 中发生异常或错误的行号?
【发布时间】:2018-11-14 16:57:30
【问题描述】:

我有一个这样的 Django ORM 查询:

try:
    specialization_object = Specialization.objects.get(name="My Test Specialization")
except Exception as ex:
    print(ex)

当发生异常时,它会打印“专业化匹配查询不存在。”,但不会打印行号。如何跟踪发生异常或错误的行号?

【问题讨论】:

标签: python django django-orm


【解决方案1】:

我刚刚想出了一个简单的解决方案:

import traceback
try:
    specialization_object = Specialization.objects.get(name="My Test Specialization")
except Exception as ex:
    print(traceback.format_exc())

【讨论】:

    【解决方案2】:

    如果您因任何原因不能使用日志记录,可以使用标准包traceback,您可以执行以下操作:

    traceback.print_exc(file=sys.stdout)
    

    【讨论】:

      【解决方案3】:

      试试这个:

      import logging
      logger = logging.getLogger(__name__)
      
      try:
          specialization_object = Specialization.objects.get(name="My Test Specialization")
      except Exception as ex:
          logger.info(ex, exc_info=True) # exc_info will add traceback
      

      进一步阅读见here

      【讨论】:

      • 过失 - 刚刚切换到日志记录:/
      • print(ex, exc_info=True) 表明 exc_info 是这里的意外参数。
      • 或者只是logger.exception(message)
      猜你喜欢
      • 1970-01-01
      • 2016-11-14
      • 2011-03-20
      • 2020-06-15
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多