2017-01-02 3 views
2

Ich schreibe gerade eine Erweiterung zu einer anderen Python-Bibliothek, die ich nicht kontrollieren kann. Die Bibliothek verfügt über Funktionen wie folgt aus:Python - Ermitteln, ob eine Ausnahme in einer Funktion ausgelöst wurde

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

Wenn eine leere Liste zurückgegeben wird, möchte ich darauf irgendwie Figur, wenn das der Fall ist, weil eine Ausnahme ausgelöst wurde (vor Werte Quellen hinzugefügt werden könnten), oder weil einfach den Quellen wurden keine Werte hinzugefügt (ohne eine Ausnahme auszulösen).

Irgendwelche Ideen? Auch hier habe ich keine Kontrolle über die Funktion, daher kann ich den Rückgabewert nicht ändern oder die try-> außer außerhalb der Funktion hinzufügen.

+0

Konnte nicht die Funktion bearbeiten, wo 'außer: return 1' –

+0

Es gibt tatsächlich Tausende dieser Funktionen. Also kann ich an den Funktionen nichts ändern. Und jedes Mal, wenn der Entwickler der externen Bibliothek ein Update veröffentlicht, müsste ich alle tausend Funktionen erneut überprüfen, also nein. – goocreations

+0

Was ist, wenn Sie stattdessen die Ausnahmen.BaseException installiert und einen Instanzzähler der Art hinzugefügt haben? Wenn also __init__ aufgerufen wird, wird es erhöht? Wenn Sie Multithread-Code nicht ausführen, können Sie 'Exception.counter == counter_before_call' nach jedem Aufruf überprüfen. stinkender Hack, ganz sicher. Und, Vorsicht, Ausnahmen scheinen * \ __ slots \ __ * zu verwenden, was es viel schwieriger macht. –

Antwort

0

Sie können immer versuchen, die lib-Funktion mit einer vernünftigen Umsetzung monkeypatch statt:

import insanelib 

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


insanelib.xyz = myxyz 

Oder Sie können einen Patch auf die lib des Autors vorzulegen, damit er zumindest eine Option zum nicht Ausnahmen ignorieren.

Verwandte Themen