IMDbPy:如何捕获IMDbDataAccessError?

2024-10-04 05:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我完全不擅长处理异常,我一直在学习如何使用IMDbPy。 我想在用户输入无效ID时捕获异常

import imdb
from imdb import IMDbDataAccessError
ia = imdb.IMDb(accessSystem='http')
try:
    movie = ia.get_movie('12121212212121')
except IMDbDataAccessError:
    print("error")

但它不会打印文本“error”,而是显示错误消息。这是-

IMDbDataAccessError exception raised; args: ({'errcode': None,
'errmsg': 'None', 'url':
'https://www.imdb.com/title/tt12121212212121/reference', 'proxy': '',
'exception type': 'IOError', 'original exception': <HTTPError 404:
'Not Found'>},); kwds: {}

Tags: 用户fromimportnoneidhttpexceptionerror
2条回答

引发的异常的类型是IOError,它是Pythonbuilt-in exceptions的一种,您只捕获了IMDbDataAccessError,它不是IOError的父级。你知道吗

您可以分别捕获它们(例如使用ZeroDivisionError而不是IOError),如:

try:
    1/0
except IMDbDataAccessError:
    print("problem in IMDbPY")
except ZeroDivisionError:
    print("division by zero error")

或者只是捕获任何东西;请注意,这被认为是一种不好的做法,因为它可能会掩盖其他问题并使代码难以调试,但在某些情况下,它是有意义的:

try:
    1/0
except Exception as e:
    print("ERROR: %s" % e)
import imdb
from imdb import IMDbDataAccessError
try:
    ia = imdb.IMDb(accessSystem='http', reraiseExceptions=True)
    movie = ia.get_movie('12121212212121')
except:
    print("error")

reraiseExceptions的选项有帮助。现在程序输出跟踪,然后输出error。你知道吗


我通过查看引发异常的函数的源代码发现了这一点。i、 例如retrieve_unicodeupdate。搜索"ret = method(mopID)"我找到了this,只有在IMDB Base对象中self._reraise_exceptions设置为true时,它才会再次引发异常。你知道吗

我创建了一个issue,让他们更清楚地看到这个设置是必要的


同样值得注意的是他们的config摘录:

## Set the threshold for logging messages.
# Can be one of "debug", "info", "warning", "error", "critical" (default:
# "warning").
#loggingLevel = debug

这意味着您可以减少日志的详细程度。但是,传递loggingLevel="critical"参数似乎不会减少控制台输出。这是因为这些错误本身就属于critical级别。
但是,您可以disable the logger completely

import imdb
from imdb import IMDbDataAccessError
import logging
try:
    logger = logging.getLogger('imdbpy');
    logger.disabled = True
    ia = imdb.IMDb(accessSystem='http', reraiseExceptions=True, loggingLevel="critical")
    movie = ia.get_movie('12121212212121')
except IMDbDataAccessError:
    print("error")

记录器的名称是currently'imdbpy''imdbpy.aux'。你知道吗

相关问题 更多 >