【问题标题】:Python http error loggingPython http 错误记录
【发布时间】:2015-08-11 08:02:04
【问题描述】:

以下问题

我确实有一个 python 脚本正在运行并执行 HTTP 请求。 有时我会遇到几个错误,例如 http 400。现在我想记录这些错误并中断脚本停止工作。

 import logging

 date = .strftime().....

 try: 
        script X
 except:
        error = urllib2.HTTPError
        errorcode = error.code
        file = open ("error.txt",'r+')
        file.write("Error Code: %s, date \n", errorcode)
        file.close()
        pass

对吗?还是我做错了什么。我应该对 HTTP 错误使用 If 吗?

这会阻止脚本在出错时停止 -> 通过

谢谢!

【问题讨论】:

  • 为什么不能自己尝试一下?

标签: python http logging error-handling


【解决方案1】:

你的台词说:

error = urllib2.HTTPError

在这种情况下毫无意义。它说errorurllib2.HTTPError 类。该类用于引发异常,您对捕获异常感兴趣。

通常我们写:

try: 
    #  http attempt
except urllib2.HTTPError, error:
    errorcode = error.code

这表示您正在处理的异常类型urllib2.HTTPError,这就是error 的类型,或者从urllib2.HTTPError 继承的任何类对象。

这也意味着您不会处理任何其他类型的异常。这是一件好事。只处理你能处理的事情,让其他一切从你身边飞过。

目前您的except 语句捕获所有可能的异常类型。您还丢弃了信息,因此您并不真正知道异常是什么。

写入文件,使用with。如果在写入文件时出现异常,这可以确保正确关闭文件。不要使用file 作为变量名。您需要使用% 插入字符串格式:

    with open ("error.txt",'r+') as log:
        log.write("Error Code: %s, date \n" % errorcode)

好的,代码审查结束。

【讨论】:

  • 哦,对了,谢谢,我的错。所以我会记录错误,但仍然使用“通过”来表示“继续”
  • 如果块为空,您只需要pass。见this question
【解决方案2】:

使用 python requests library::::

try:
    res = requests.post(url, data, headers=headers, auth=auth)
    if res.status_code == 200 or res.status_code == 201:
        return 'SUCCESS', res.content
    else:
        return 'FAIL', res.status_code
except Exception as e:
    print "Http request failed... %s" % traceback.format_exc()

【讨论】:

  • 你应该使用raise_for_status
  • 但是您的方法没有错误记录。只打印错误不是我的目标。此外,我使用了 urllib2 而不是请求。要不要改成request方法?
  • 不建议为基本问题安装库。
【解决方案3】:

构建代码的更好方法是使用错误日志记录(Python 内置的一项功能):

import logging

logger = logging.getLogger('__name__')

fh = logging.FileHandler('errors.log')
logger.addHandler(fh)

try:
   # something
except urllib2.HttpError, e:
   logger.error(e)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2017-12-26
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多