Настраиваемая обработка ошибок для функции загрузки - PullRequest
0 голосов
/ 26 ноября 2018

Я разработал форму загрузки, в которую можно загружать определенный файл .xlsx.Требуется обработать любые исключения для загрузки не xlsx (например, zip, exe-файл).Я использую библиотеку pyexcel для чтения загрузки.Я попытался создать следующий код для обработки этого исключения:

введите описание изображения здесь введите описание изображения здесь

Код обработки ошибки следующий:

class FILE_TYPE_NOT_SUPPORTED_FMT(Exception):
pass

@app.errorhandler(FILE_TYPE_NOT_SUPPORTED_FMT)
def custom_handler(errrors):
app.logger.error('Unhandled Exception: %s', (errrors))
return render_template('400.html'), 400

и код загрузки выглядит следующим образом:

@users.route("/oisdate_upload", methods=['GET', 'POST'])
@login_required
def doimport_ois_date():
msg=None
if request.method == 'POST':

def OIS_date_init_func(row):
#c.id = row['id']
c = Ois_date(row['date'],row['on'],row['m1'],row['m2'],row['m3'],row['m6'],row['m9'],row['y1'],row['y2'],row['y3'],row['y4'],row['y5'],row['y7'],row['y10'])
return c

request.save_book_to_database(
field_name='file', session=db.session,
tables=[Ois_date],
initializers=[OIS_date_init_func])
msg = "Successfully uploaded"
#return redirect(url_for('users.doimport_ois_date'), code=302)
if((Ois_date.query.order_by(Ois_date.date.desc()).first()) is not None):
date_query = Ois_date.query.order_by(Ois_date.date.desc()).first()
start_date = date_query.date
date_query1 = Ois_date.query.order_by(Ois_date.date.asc()).first()
end_date = date_query1.date

return render_template('OISdate_upload.html',msg=msg, start_date=start_date,end_date=end_date)

Я не могу понять, как правильно зафиксировать ошибку и обработать ее, любая обратная связь будет принята с благодарностью.

1 Ответ

0 голосов
/ 26 ноября 2018

У вас есть два варианта обработки этого исключения.

1) вы импортируете исключение непосредственно из пакета pyexcel и используете его в качестве ошибки:

например

from pyexcel.exceptions import FileTypeNotSupported
...
@app.errorhandler(FileTypeNotSupported)
...

2) Или вы можете обернуть код, в который вы хотите загрузить электронную таблицу, в блок, исключающий попытку, и выдать пользовательскую ошибку.

from pyexcel.exceptions import FileTypeNotSupported

class CustomError(Exception)
    pass

@app.errorhandler(CustomError)
    # do something
    pass

@app.route('/upload_excel')
def upload_excel():
    try:
        function_where_you_load_excel()
    except FileTypeNotSupported:
        raise CustomError
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...