Flask TypeError - внутренняя ошибка сервера ngrok 500 - повторить скрипт Python - Отсутствует возврат IF?

Когда Webhook запускает (для открытия сделки на форексе) ngrok для отправки POST для выполнения инструкции IF в моем скрипте Python, мой скрипт должен возвращать недопустимое значение в ngrok. Ошибка, выданная ngrok, представляет собой внутреннюю служебную ошибку 500, и моя ошибка фляги выдает «TypeError: функция просмотра не вернула действительный ответ. Функция либо вернула None, либо завершилась без оператора возврата». Я получаю сообщение об ошибке только тогда, когда [] доставляется в if x ['position'] == []: Если отправлено другое значение, все работает как надо. Ошибка плохая для меня, потому что она вызывает многократную отправку POST в течение короткого времени (~ 10 с?). Для меня это плохо, потому что это торговый бот. На волатильном рынке, где сделка выполняется за несколько секунд, я не хочу, чтобы ошибка снова открывала новую сделку после того, как моя цель была достигнута. Я готов либо отказаться от повторной отправки POST после ошибки, либо фундаментально исправить проблему. Я пытался повсюду возвращать деньги, но, похоже, это не решило проблему. Открыт для любых идей! Спасибо за любую помощь!

Вот мой сценарий. Ошибка, скорее всего, связана с функцией If ['position'] и снова возникает только при условии [].

from actions import *
from flask import Flask, request, abort
import oandapyV20
import oandapyV20.endpoints.positions as positions
from exampleauth import exampleAuth


# Create Flask object called app.
app = Flask(__name__)


# Create root to easily let us know its on/working.
@app.route('/')
def root():
    return 'online'


@app.route('/webhook', methods=['POST'])
def webhook():
    if request.method == 'POST':
        accountID, access_token = exampleAuth()
        api = oandapyV20.API(access_token=access_token)
        client=oandapyV20.API(access_token)
        r=positions.OpenPositions(accountID)
        x=client.request(r)
        if x['positions']==[]:
            data = parse_webhook(request.get_data(as_text=True))
            sell=data['side']
            if data['side']=='sellEURAUD':
                exec(open("marketTPSLEURAUDv2sell.py").read())
            elif data['side']=='buyEURAUD':
                exec(open("marketTPSLEURAUDv2buy.py").read())
            elif data['side']=='buyUSDCAD':
                exec(open("marketTPSLUSDCADv2buy.py").read())
            elif data['side']=='sellUSDCAD':
                exec(open("marketTPSLUSDCADv2sell.py").read())
            elif data['side']=='buyEURUSD':
                exec(open("marketTPSLEURUSDv2buy.py").read())
            elif data['side']=='sellEURUSD':
                exec(open("marketTPSLEURUSDv2sell.py").read())
            else:
                return'okay'
        else:
            return 'okay'
    else:
        return 'okay'

if __name__ == '__main__':
    app.run()
else: return 'okay'

person Michael    schedule 04.06.2020    source источник
comment
Если вызывается любой из ваших execs, return не выполняется.   -  person Scott Hunter    schedule 05.06.2020
comment
Спасибо за ответ! Понятно, значит, я должен вставлять файлы вместо того, чтобы вызывать exec? Или есть способ лучше?   -  person Michael    schedule 05.06.2020
comment
Да, я встроил код и никаких ошибок! Огромное спасибо! Вы хотите добавить это в качестве ответа?   -  person Michael    schedule 05.06.2020


Ответы (1)


Если вызывается любой из ваших execs, return не выполняется. Непонятно, как вы хотели бы это исправить.

person Scott Hunter    schedule 04.06.2020
comment
Я просто встроил их все. #bruteforce Только один раз! - person Michael; 05.06.2020