【问题标题】:Python - Determine if an exception was raised in a functionPython - 确定函数中是否引发异常
【发布时间】:2017-05-16 17:39:58
【问题描述】:

我目前正在编写对另一个我无法控制的 Python 库的扩展。该库具有如下功能:

def xyz():
    try:
        sources = []
        ...
        #code that may add values to sources and may also throw an exception
        ...
        return sources
    except:
        return sources

如果返回一个空列表,我想以某种方式确定是因为抛出了异常(在值可以添加到源之前),还是因为没有向源添加值(没有抛出异常)。

有什么想法吗?同样,我无法控制函数,因此无法更改返回值或在函数外部添加 try->except。

【问题讨论】:

  • 你不能编辑except: return 1的函数
  • 这些函数实际上有数千个。因此,我无法更改函数中的任何内容。每次外部库的开发人员发布更新时,我都必须再次检查所有数千个函数,所以没有。
  • 如果你猴子修补了 exceptions.BaseException 并添加了各种实例计数器怎么办?这样当 init 被调用时,它会递增吗?如果您没有运行多线程代码,那么您可以在每次调用后检查Exception.counter == counter_before_call。臭黑客,肯定的。而且,请注意,Exceptions 似乎使用了 __slots__,这让它变得更加困难。
  • 感谢 JL,这个想法可能行得通。

标签: python exception exception-handling except


【解决方案1】:

你总是可以尝试用一个健全的实现来猴子补丁库的函数:

import insanelib

def myxyz():
    sources = []
    ...
    #code that may add values to sources and may also throw an exception
    ...
    return sources


insanelib.xyz = myxyz

或者您可以向库的作者提交补丁,以便他至少提供一个选项以忽略异常。

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 2017-10-04
    • 2018-01-16
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多