Jak mogę uzyskać nazwę pliku i numer linii w skrypcie Python.
Dokładnie informacje o pliku, które otrzymujemy z śledzenia wyjątku. W tym przypadku bez zgłaszania wyjątku.
Dzięki mcandre odpowiedź brzmi:
#python3
from inspect import currentframe, getframeinfo
frameinfo = getframeinfo(currentframe())
print(frameinfo.filename, frameinfo.lineno)
import inspect inspect.getframeinfo(inspect.currentframe()).lineno
currentframe()
jest wywoływany, co oznacza, że nie możesz tego uprościć bardziej niżgetframeinfo(currentframe()).lineno
(jeśli zależy Ci tylko na numerze linii, a nie nazwie pliku). Zobacz docs.python.org/2/library/inspect.html#inspect.currentframeTo, czy używasz,
currentframe().f_back
zależy od tego, czy używasz funkcji, czy nie.Zadzwoń sprawdzić bezpośrednio:
Wywołanie funkcji, która robi to za Ciebie:
źródło
Przydatne, jeśli jest używane we wspólnym pliku - wyświetla nazwę pliku, numer linii i funkcję dzwoniącego:
źródło
Nazwa pliku :
Linia :
(nie
inspect.currentframe().f_back.f_lineno
jak wspomniano powyżej)źródło
NameError: global name '__file__' is not defined
na moim interpretera Pythona:Python 2.7.6 (default, Sep 26 2014, 15:59:23)
. Zobacz stackoverflow.com/questions/9271464/…Lepiej też używać sys-
Wynik to:
źródło
Tylko po to, aby się przyczynić,
linecache
w pythonie jest moduł, tutaj są dwa linki, które mogą pomóc.dokumentacja modułu
linecache kod źródłowy linecache
W pewnym sensie można „zrzucić” cały plik do jego pamięci podręcznej i odczytać go z danymi linecache.cache z klasy.
Aby uzyskać dodatkowe informacje, do obsługi błędów, możesz po prostu użyć
źródło
źródło
__file__
: Zobacz stackoverflow.com/questions/3056048/…W Pythonie 3 możesz użyć wariacji na temat:
W kodzie możesz następnie użyć:
Produkować:
Gdzie 123 i 124 to linie, z których wykonywane są połączenia.
źródło
Oto, co działa w moim przypadku, aby uzyskać numer wiersza w Pythonie 3.7.3 w VSCode 1.39.2 (
dmsg
to mój mnemonik dla wiadomości debugowania):Aby wywołać pokazanie zmiennej
name_s
i jej wartości:Wynik wygląda następująco:
źródło