【问题标题】:how to catch an error using the python ISBNLIB meta method and continue如何使用 python ISBNLIB 元方法捕获错误并继续
【发布时间】:2018-12-06 08:31:51
【问题描述】:

我有一个使用 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'))

【问题讨论】:

    标签: python sqlite flask error-handling isbnlib


    【解决方案1】:

    类似的东西应该适合你:

    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'))
    

    【讨论】:

      【解决方案2】:

      这可行(目前),但不建议使用,因为它使用了不受支持的 api!

      改用 catch-all isbnlib 异常

      from isbnlib import ISBNLibException

      或具体的

      from isbnlib.dev import NoDataForSelectorError

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多