Mam dużą starszą metodę Pythona, która zawiera około dwudziestu return
instrukcji. Ta metoda nie powinna zwracać None
, ale robi to. Jest powtarzalny w prostym przypadku testowym.Debugowanie, w którym zwracana jest metoda Brak
Do tej pory użyłem debuggera i przeszedłem przez linię kodu po linii, aby znaleźć zgodną instrukcję return.
Ale czy jest łatwiejszy sposób?
Czy istnieje sposób podniesienia wyjątku, gdy tylko metoda zwróci None?
i Oczywiście muszę zobaczyć wiersz zawierający instrukcję return.
przykład:
def big_method(arg1, some_var):
#.... many returns
if arg1:
return some_var # <------
#... many returns
assert not big_method(True, None) is None
Powyżej prosty fragment kodu. Rezultat:
Traceback (most recent call last):
File "/home/modwork_vums_d/src/manyreturns.py", line 8, in <module>
assert not big_method(True, None) is None
AssertionError
Przede traceback nie pomaga bardzo dużo, ponieważ chcę zobaczyć linię wewnątrzbig_method()
. W powyższym przykładzie chcę zobaczyć, który z nich oznaczono jako <------
.
Używam PyCharm, ale czysty pyton lub inne rozwiązanie jest mile widziane.
Tylko dla rekordów. Istnieje kolejne pytanie, które próbuje włączyć tę funkcję w PyCharm: PyCharm: Debugging: r(eturn) Continue execution until the current function returns
Istnieje możliwe rozwiązanie: https://stackoverflow.com/a/1156048/5588279. – Sraw
Zastanawiam się, że byłoby to możliwe, ramka do wykonania big_method została już odzyskana. – georgexsh
może mógłbyś wykorzystać funkcję śledzenia tłumacza, aby nagrać ścieżkę wykonania wywoływanej funkcji, a następnie wydrukować, gdy zewnętrzna asercja nie powiodła się. – georgexsh