Como você pretende depurar erros no Flask? Imprimir no console? Mensagens em Flash para a página? Ou existe uma opção mais poderosa disponível para descobrir o que está acontecendo quando algo dá errado?
Não há nada mágico app.run()(com a depuração ativada ou desativada). O balão se comporta como qualquer outro aplicativo python, para que você possa depurá-lo da mesma maneira que depura qualquer aplicativo Python. Se você deseja usar o log, use o log. Se você deseja imprimir, use impressões. Você pode até usar um depurador, se quiser.
Mark Hildreth
Respostas:
128
A execução do aplicativo no modo de desenvolvimento mostrará um retorno e console interativos no navegador quando houver um erro. Para executar no modo de desenvolvimento, defina a FLASK_ENV=developmentvariável de ambiente e use o flask runcomando (lembre-se de apontar também FLASK_APPpara o seu aplicativo).
Para Linux, Mac, Subsistema Linux para Windows, Git Bash no Windows, etc .:
export FLASK_APP=myapp
export FLASK_ENV=development
flask run
Para o Windows CMD, use em setvez de exportar:
set FLASK_ENV=development
Para o PowerShell, use $env:
$env:FLASK_ENV ="development"
Antes do Flask 1.0, isso era controlado pela FLASK_DEBUG=1variável de ambiente.
Se você estiver usando o app.run()método em vez do flask runcomando, passe debug=Truepara ativar o modo de depuração.
Os rastreamentos também são impressos no terminal executando o servidor, independentemente do modo de desenvolvimento.
Se você estiver usando PyCharm, VS Code, etc., poderá aproveitar o depurador para percorrer o código com pontos de interrupção. A configuração de execução pode apontar para uma chamada de script app.run(debug=True, use_reloader=False)ou apontar para o venv/bin/flaskscript e usá-lo como faria na linha de comando. Você pode deixar o recarregador desativado, mas um recarregamento matará o contexto de depuração e você precisará capturar um ponto de interrupção novamente.
Você também pode usar pdb, pudb ou outro depurador de terminal chamando set_tracena visualização em que deseja iniciar a depuração.
Certifique-se de não usar muito amplo, exceto blocos. Cercar todo o seu código com um catch-all try... except...silenciará o erro que você deseja depurar. Geralmente, é desnecessário, pois o Flask já manipulará exceções, mostrando o depurador ou um erro 500 e imprimindo o retorno ao console.
Na verdade, quando você executa com debug=Trueque você está realmente usando o debuger Werkzeug por isso não é um ou-ou ;-)
Sean Vieira
Ha, você está certo. Acho que deveria ter examinado o setup.py do Flask para obter os requisitos. Eu uso uma cópia modificada para trabalhar no GAE, onde você deve inicializar o Werkzeug manualmente.
bnlucas
Eu tenho app.run set (debug = True), se eu fizer xyz print onde ele imprimir, graças
Kimmy
O uso print 'xyz'será impresso no console. Se você deseja depurar no navegador, precisará forçar um erro no local em que deseja depurar. raise Exception('xyz'). Isso acionará a depuração para saída na janela do navegador.
bnlucas
25
Na 1.1.xdocumentação , você pode ativar o modo de depuração exportando uma variável de ambiente para o prompt do shell:
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Esta resposta seria mais útil se explicasse o que é realmente o modo de depuração. Faz mais do que permitir a depuração no navegador? Infelizmente, como estou trabalhando em uma API REST, isso realmente não me ajuda muito.
Michael Scheper
Onde coloco esse trecho?
mLstudent33 6/06
1
@ mLstudent33 em uma concha
Édouard Lopez
15
Pode-se também usar a extensão Flask Debug Toolbar para obter informações mais detalhadas incorporadas nas páginas renderizadas.
from flask importFlaskfrom flask_debugtoolbar importDebugToolbarExtensionimport logging
app =Flask(__name__)
app.debug =True
app.secret_key ='development key'
toolbar =DebugToolbarExtension(app)@app.route('/')def index():
logging.warning("See this message in Flask Debug Toolbar!")return"<html><body></body></html>"
Você pode compartilhar um exemplo de uma configuração de trabalho? Eu já tenho o FLASK_APP definido no meu ambiente e a configuração padrão não funcionaria. Eu tentei este - pastebin.com/v8hBQ2vv e um número de permutações semelhantes, mas sem sucesso.
Brandon Dube
12
Se você deseja depurar seu aplicativo de balão, basta ir para a pasta onde está o aplicativo de balão. Não se esqueça de ativar seu ambiente virtual e colar as linhas no console, altere "mainfilename" para o arquivo principal do balão.
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Depois de ativar o aplicativo depurador para balão, quase todos os erros serão impressos no console ou na janela do navegador. Se você quiser descobrir o que está acontecendo, pode usar instruções de impressão simples ou também console.log () para código javascript.
Não está funcionando para mim ... continua mostrando o modo de depuração: desativado
Federico Gentile
3
Para ativar o modo de depuração no balão, basta digitar set FLASK_DEBUG=1no seu CMDpara Windows e exportar FLASK_DEBUG=1para o Linux termial, em seguida, reinicie o aplicativo e pronto!
app.run()
(com a depuração ativada ou desativada). O balão se comporta como qualquer outro aplicativo python, para que você possa depurá-lo da mesma maneira que depura qualquer aplicativo Python. Se você deseja usar o log, use o log. Se você deseja imprimir, use impressões. Você pode até usar um depurador, se quiser.Respostas:
A execução do aplicativo no modo de desenvolvimento mostrará um retorno e console interativos no navegador quando houver um erro. Para executar no modo de desenvolvimento, defina a
FLASK_ENV=development
variável de ambiente e use oflask run
comando (lembre-se de apontar tambémFLASK_APP
para o seu aplicativo).Para Linux, Mac, Subsistema Linux para Windows, Git Bash no Windows, etc .:
Para o Windows CMD, use em
set
vez de exportar:Para o PowerShell, use
$env
:Antes do Flask 1.0, isso era controlado pela
FLASK_DEBUG=1
variável de ambiente.Se você estiver usando o
app.run()
método em vez doflask run
comando, passedebug=True
para ativar o modo de depuração.Os rastreamentos também são impressos no terminal executando o servidor, independentemente do modo de desenvolvimento.
Se você estiver usando PyCharm, VS Code, etc., poderá aproveitar o depurador para percorrer o código com pontos de interrupção. A configuração de execução pode apontar para uma chamada de script
app.run(debug=True, use_reloader=False)
ou apontar para ovenv/bin/flask
script e usá-lo como faria na linha de comando. Você pode deixar o recarregador desativado, mas um recarregamento matará o contexto de depuração e você precisará capturar um ponto de interrupção novamente.Você também pode usar pdb, pudb ou outro depurador de terminal chamando
set_trace
na visualização em que deseja iniciar a depuração.Certifique-se de não usar muito amplo, exceto blocos. Cercar todo o seu código com um catch-all
try... except...
silenciará o erro que você deseja depurar. Geralmente, é desnecessário, pois o Flask já manipulará exceções, mostrando o depurador ou um erro 500 e imprimindo o retorno ao console.fonte
Você pode usar
app.run(debug=True)
a edição do Werkzeug Debugger, como mencionado abaixo, e eu deveria saber.fonte
debug=True
que você está realmente usando o debuger Werkzeug por isso não é um ou-ou ;-)print 'xyz'
será impresso no console. Se você deseja depurar no navegador, precisará forçar um erro no local em que deseja depurar.raise Exception('xyz')
. Isso acionará a depuração para saída na janela do navegador.Na
1.1.x
documentação , você pode ativar o modo de depuração exportando uma variável de ambiente para o prompt do shell:fonte
Pode-se também usar a extensão Flask Debug Toolbar para obter informações mais detalhadas incorporadas nas páginas renderizadas.
Inicie o aplicativo da seguinte maneira:
fonte
Se você estiver usando o Código do Visual Studio, substitua
com
Aparece ao ativar o depurador interno, desabilita o depurador do VS Code.
fonte
Se você deseja depurar seu aplicativo de balão, basta ir para a pasta onde está o aplicativo de balão. Não se esqueça de ativar seu ambiente virtual e colar as linhas no console, altere "mainfilename" para o arquivo principal do balão.
Depois de ativar o aplicativo depurador para balão, quase todos os erros serão impressos no console ou na janela do navegador. Se você quiser descobrir o que está acontecendo, pode usar instruções de impressão simples ou também console.log () para código javascript.
fonte
Instale
python-dotenv
no seu ambiente virtual.Crie um .flaskenv na raiz do seu projeto. Por raiz do projeto, quero dizer a pasta que possui o arquivo app.py
Dentro deste arquivo, escreva o seguinte:
Agora emita o seguinte comando:
fonte
Para ativar o modo de depuração no balão, basta digitar set
FLASK_DEBUG=1
no seuCMD
para Windows e exportarFLASK_DEBUG=1
para o Linux termial, em seguida, reinicie o aplicativo e pronto!fonte
Dica rápida - se você usa um PyCharm, vá para
Edit Configurations
=>Configurations
e ative aFLASK_DEBUG
caixa de seleção, reinicie oRun
.fonte
Use registradores e instruções de impressão no ambiente de desenvolvimento, você pode ir para sentinela no caso de ambientes de produção.
fonte
Para usuários do Windows:
Abra o PowerShell e o CD no diretório do projeto.
Use esses comandos no Powershell, todas as outras coisas não funcionarão no Powershell.
fonte
Se você está executando localmente e deseja poder percorrer o código:
python -m pdb script.py
fonte