python堆栈跟踪_python-从pdb知道哪一行引发异常并查看堆栈...

这篇博客讨论了在Python中使用pdb进行异常调试时遇到的问题。作者指出,当异常被捕获后,pdb.set_trace()虽然可以进入调试模式,但默认情况下无法直接显示错误发生的堆栈跟踪。他们通过示例代码展示了如何在异常发生时查看堆栈信息,并指出需要手动继续执行以获取完整堆栈跟踪。作者询问是否有更简便的方法在异常发生时直接获取这些信息。
摘要由CSDN通过智能技术生成

假设我有一个非常基本的程序,肯定会引发异常.我已经添加了一个pdb.set_trace(),并且希望能够在发生错误时环顾四周.

import pdb

from random import randint

def two_possible_errors(input):

try:

assert input % 2, "error!"

assert not input % 2, "error!"

except Exception, e:

pdb.set_trace()

raise

two_possible_errors(randint(0,9))

我的问题是,当我捕获到异常时,我已经在except子句中了,我真的不知道错误实际上在哪里发生.通常,我会环顾四周,但是如果我想查看堆栈跟踪,则需要恢复执行并等待程序崩溃.有没有更好的办法?

好的,让我们从例外开始.在这种特殊情况下,我可以在断言中留言,但这不重要.

> /Users/jluc/kds2/wk/explore/explore_pdb_exceptions.py(16)two_possible_errors()

-> raise

(Pdb) e

AssertionError('error!',)

在这一点上,我不知道这两行中的哪一行出错了.

让我们在哪里尝试.它返回当前位置,而不是发生异常的位置.

(Pdb) where

/Users/jluc/kds2/wk/explore/explore_pdb_exceptions.py(20)()

-> test()

/Users/jluc/kds2/wk/explore/explore_pdb_exceptions.py(18)test()

-> two_possible_errors(randint(0,9))

> /Users/jluc/kds2/wk/explore/explore_pdb_exceptions.py(16)two_possible_errors()

-> raise

让我们打印第16行,只是为了确保:

(Pdb) l 16

11 try:

12 assert input % 2, "error!"

13 assert not input % 2, "error!"

14 except Exception, e:

15 pdb.set_trace()

16 -> raise

17

18 two_possible_errors(randint(0,9))

19

20 test()

为了真正知道我在哪里,我可以让pdb(c)继续并检查退出stacktrace.但是现在我完全没有使用pdb了.有没有一种简单的方法可以从异常本身获取信息?在继续之前?

(Pdb) c

Traceback (most recent call last):

File "explore_pdb_exceptions.py", line 20, in

test()

File "explore_pdb_exceptions.py", line 18, in test

two_possible_errors(randint(0,9))

File "explore_pdb_exceptions.py", line 13, in two_possible_errors

assert not input % 2, "error!"

AssertionError: error!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值