python / python/cpython

inspect.getsource returns unrelated code

Aberta
#143,299 8 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

docs
Linguagem predominante
Python
Estrelas
77.2k
Forks
35.9k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

The documentation of inspect.getsource states:

Return the text of the source code for an object. [...]

But the function returns slightly more code. It returns all lines of source code that overlap the object, even if the rest of the lines belong to different objects.

For example, the following code creates two lambdas in the same line, so inspect.getsource will return the code of both lambdas instead of just one.

import inspect

# Two function declarations in the same line
x = lambda: 1; y = lambda: 2

# prints "x = lambda: 1; y = lambda: 2\n"
print(repr(inspect.getsource(y)))

The returned code is not even necessarily valid Python, as the following list comprehension demonstrates:

import inspect

funcs = [
    lambda: 1 for
    _ in range(3)
]

# prints '    lambda: 1 for\n', including indentation and a stray "for"
print(repr(inspect.getsource(funcs[0])))
Background

I was trying to access the abstract syntax tree of a function (for JIT compilation), but that does not appear to be possible for lambdas.

Linked PRs
  • gh-143301

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece em inspect.getsource e reproduza os dois exemplos da issue. Em seguida, examine a implementação ao redor e os testes existentes para extração de código-fonte. Esclareça o comportamento pretendido para lambdas que compartilham uma linha ou abrangem a sintaxe de compreensão, e adicione cobertura de regressão mostrando o que deve ser retornado. Um pull request vinculado, gh-143301, indica que o trabalho já foi transferido para outro lugar.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
tooling
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.