Python标准库和其他库我使用(如PyQt的),有时使用非错误情况例外。 看看下面的除了功能os.get_exec_path()
它采用多try
声明赶上那些试图找到一些环境数据引发的异常。
try:
path_list = env.get('PATH')
except TypeError:
path_list = None
if supports_bytes_environ:
try:
path_listb = env[b'PATH']
except (KeyError, TypeError):
pass
else:
if path_list is not None:
raise ValueError(
"env cannot contain 'PATH' and b'PATH' keys")
path_list = path_listb
if path_list is not None and isinstance(path_list, bytes):
path_list = fsdecode(path_list)
这些异常并不表示一个错误,在正常情况下被抛出。 当使用异常断点这些例外之一,调试器也将打破这些库函数。
是否有PyCharm或Python中的一般办法有调试器上被抛出和捕获库里面没有我的代码有任何牵连异常不破?
在PyCharm,转到运行- >查看断点,并勾选“上扬”和“忽略库文件 ”。
第一个选项使得每当产生一个异常而不是终止程序正当,调试器停止,而第二个选项使PyCharm忽略库文件,因此主要公司中搜索代码的策略。
将溶液发现由于CrazyCoder的链接到功能请求,这已经被添加。
有一段时间我有这涉及类似下面的一个复杂的方案:
try( Closeable ignore = Debugger.newBreakSuppression() )
{
... library call which may throw ...
} <-- exception looks like it is thrown here
这让我从没被被扔进吞库调用中的异常被人打扰。 如果一个异常是由库调用抛出,并没有抓到,那就好像它发生在右花括号出现。
它的工作方式如下:
Closeable
是扩展的接口AutoCloseable
没有宣布任何checked异常。
ignore
仅仅是告诉IntelliJ IDEA的不抱怨未使用的变量的名称,因为愚蠢的Java不支持,有必要try( Debugger.newBreakSuppression() )
Debugger
是我自己的类与调试相关的辅助方法。
newBreakSuppression()
是它会造成一些线程局部实例的方法BreakSuppression
类将采取的,我们希望打破上的异常被暂停的事实音符。
然后,我有这将调用我的休息条件的异常断点Debugger
类,以询问是否是好的突破和Debugger
类将有一个“不”,如果任何回应BreakSuppression
中实例化对象。
这是非常复杂的,因为虚拟机引发异常我的代码加载之前,所以过滤器不能在程序启动过程进行评估,调试器会弹出一个对话框抱怨说不是忽略它。 (我不是抱怨,我恨无记载错误)。所以,我必须有一个可怕的,可怕的,做的-不尝试,这在家里的黑客在断开条件是这样的: java.lang.System.err.equals( this )
通常情况下,这将永远不会返回true,因为System.err
不等于抛出的异常,因此调试器永远不会打破。 然而,当我Debugger
类将得到初始化,它会取代System.err
有它自己的阶级,这为提供一个实现equals(Object)
,并返回true
如果调试要打破。 因此,从本质上讲,我是用System.err
作为一个永恒的全局变量。
最后,我抛弃了这整个计划,因为它过于复杂,它执行得非常糟糕,因为异常明显抛出经常在Java软件生态系统,所以每一个异常巨大抛出减慢一切时间计算表达式。
还有另外一个SO一个解决方案回答: 有pycharm,如何步入工程调试,没有进入的Django库
这是为我工作,但我还是进入“_pydev_execfile.py”文件,但我在链接的答案将其添加到排除后还没有跨进其他文件。