как отловить ошибку с помощью мета-метода python ISBNLIB и продолжить - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть простое приложение, использующее FLASK и библиотеку ISBNLIB, приложение получает штрих-код и номера ISBN, ищет ISBN и вставляет информацию в БД.

Мета-метод isbnlib ищет ISBN, а затем вставляет его в мою базу данных sqlite.

У меня проблема в том, что когда эта книга не найдена, я получаю сообщение об ошибке:

isbnlib.dev._exceptions.NoDataForSelectorError

Что я хочуЧтобы достичь, приложение должно перехватить эту ошибку и все еще вставить свой штрих-код и isbn в БД и ввести нулевые значения в другие поля.

Я не уверен, как решить эту проблему.

Буду признателен за любые предложения.

Вот код:

else:
    # Assign meta dictionary to book_lib for value calling.
    book_lib = (isbnlib.meta(isbn, service='goob', cache='default'))

    # Display meta data to user.
    flash(isbnlib.meta(isbn, service='goob', cache='default'))

    # Assign meta dictionary values to variables for insertion to DB.
    author = str(book_lib['Authors'])
    lang = book_lib['Language']
    publisher = book_lib['Publisher']
    title = book_lib['Title']
    publYear = book_lib['Year']

    db.execute(
        'INSERT INTO new_book (barcode, isbn, invoice, author_id, author, lang, publisher, title, publYear)'
        ' VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
        (barcode, isbn, invoice, g.user['id'], author, lang, publisher, title, publYear)
    )
    db.commit()
    return redirect(url_for('book.newbook'))

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Это работает (пока), но не рекомендуется, так как использует неподдерживаемый API!

Используйте вместо универсальное исключение isbnlib

from isbnlib import ISBNLibException

или конкретный

from isbnlib.dev import NoDataForSelectorError

0 голосов
/ 06 декабря 2018

Что-то вроде этого должно работать для вас:

from isbnlib.dev._exceptions import NoDataForSelectorError


else:
    # Assign meta dictionary to book_lib for value calling.
    author = None
    lang = None
    publisher = None
    title = None
    publYear = None

    try:
        book_lib = isbnlib.meta(isbn, service='goob', cache='default')
        # Display meta data to user.
        flash(book_lib)

        # Assign meta dictionary values to variables for insertion to DB.
        author = str(book_lib['Authors'])
        lang = book_lib['Language']
        publisher = book_lib['Publisher']
        title = book_lib['Title']
        publYear = book_lib['Year']

    except NoDataForSelectorError:
        pass

    db.execute(
        'INSERT INTO new_book (barcode, isbn, invoice, author_id, author, lang, publisher, title, publYear)'
        ' VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
        (barcode, isbn, invoice, g.user['id'], author, lang, publisher, title, publYear)
    )
    db.commit()
    return redirect(url_for('book.newbook'))
...