Como posso obter o nome do arquivo e o número da linha no script python.
Exatamente as informações do arquivo que obtemos de um rastreamento de exceção. Nesse caso, sem gerar uma exceção.
Graças a mcandre, a resposta é:
#python3
from inspect import currentframe, getframeinfo
frameinfo = getframeinfo(currentframe())
print(frameinfo.filename, frameinfo.lineno)
import inspect inspect.getframeinfo(inspect.currentframe()).lineno
currentframe()
é chamado, o que significa que você não pode simplificar mais do quegetframeinfo(currentframe()).lineno
(se você só se preocupa com o número da linha e não com o nome do arquivo). Consulte docs.python.org/2/library/inspect.html#inspect.currentframeSe você usa
currentframe().f_back
depende se você está usando uma função ou não.Chamando a inspeção diretamente:
Chamar uma função que faz isso por você:
fonte
Útil se usado em um arquivo comum - imprime o nome do arquivo, o número da linha e a função do chamador:
fonte
Nome do arquivo :
Linha :
(não
inspect.currentframe().f_back.f_lineno
conforme mencionado acima)fonte
NameError: global name '__file__' is not defined
no meu interpretador Python:Python 2.7.6 (default, Sep 26 2014, 15:59:23)
. Consulte stackoverflow.com/questions/9271464/…Melhor usar o sistema também-
O resultado é:
fonte
Só para contribuir,
existe um
linecache
módulo em python, aqui estão dois links que podem ajudar.documentação do módulo
linecache código-fonte do linecache
De certo modo, você pode "despejar" um arquivo inteiro em seu cache e lê-lo com os dados linecache.cache da classe.
Para obter informações adicionais, para tratamento de erros, você pode simplesmente usar
fonte
fonte
__file__
: Consulte stackoverflow.com/questions/3056048/…No Python 3, você pode usar uma variação de:
No código, você pode usar:
Para produzir:
Onde 123 e 124 são as linhas de onde as chamadas são feitas.
fonte
Aqui está o que funciona para mim para obter o número da linha em Python 3.7.3 em VSCode 1.39.2 (
dmsg
é meu mnemônico para mensagem de depuração):Para chamar mostrando uma variável
name_s
e seu valor:A saída é semelhante a esta:
fonte