【问题标题】:Python Requests ExceptionsPython 请求异常
【发布时间】:2017-08-04 10:21:26
【问题描述】:

当我尝试发布请求时收到此错误,我只是尝试添加异常,但异常无法处理它

引发 ConnectionError(e, request=request) ConnectionError: HTTPSConnectionPool(host='www.examplewebsite.com', port=443): Max retries exceeded with url: /login/ (由 NewConnectionError(': 无法建立新连接: [Errno 10060] 连接尝试失败)因为连接方在一段时间后没有正确响应,或者由于连接的主机没有响应而建立连接失败',))

我试过这个

除了 requests.exceptions.ConnectionError 作为 C: 打印“失败” 除了 requests.exceptions.TooManyRedirects: 打印“失败”

但还是一样的错误

有什么办法解决吗?

编辑:

默认工作(lk): 尝试: 会话 = 请求。会话() headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'} r = session.get("https://www.example.com/login/") post = session.post('https://www.example.com', data={"log": "name", “密码”:“姓名”,}, 标题=标题) rGet = session.get('https://www.example.com') 除了 requests.exceptions.ConnectionError 作为 C: 打印“失败2” 除了 requests.exceptions.TooManyRedirects: 打印“失败3”

【问题讨论】:

  • 你能多显示一些你的代码吗?主要是与 try/catch 相关的部分,它可以提供帮助,谢谢!
  • 添加有问题的代码请检查
  • @GreyByte 现在您在创建(定义)函数期间捕获异常。如果你想在函数执行期间捕获异常,try/except块应该定义在within函数体中。

标签: python exception-handling python-requests


【解决方案1】:

你可以使用这样的东西 -

try:
    res = requests.get(adress,timeout=30)
except requests.ConnectionError as e:
    print("OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n")
    print(str(e))            
except requests.Timeout as e:
    print("OOPS!! Timeout Error")
    print(str(e))
except requests.RequestException as e:
    print("OOPS!! General Error")
    print(str(e))
except KeyboardInterrupt:
    print("Someone closed the program")

【讨论】:

    【解决方案2】:

    您的 try/except 块不在正确的位置,它必须在 函数中:

    def job(lk):
        session = requests.session()
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
        try:
    
            r = session.get("https://www.example.com/login/")
            post = session.post(
                'https://www.example.com', 
                data={"log": "name", "pwd": "name",},                                                                 
                headers=headers
                )
            rGet = session.get('https://www.example.com')
    
    
        except requests.exceptions.ConnectionError as C:
            print "Failed 2"
        except requests.exceptions.TooManyRedirects:
            print "Failed 3"
    

    另外请注意,您当前的异常处理对于故障排除不是很有用 - 您没有确切的异常、完整的回溯,而且您甚至不知道三个请求中的哪一个失败了 - 但我认为这是只是占位符代码 ATM。

    【讨论】:

    • 是的,它在函数内只是在此处发布时出现错误
    • @GreyByte 如果您希望获得任何帮助,请发布正确的代码和完整的异常消息、回溯等。
    【解决方案3】:

    您的 try catch 块应该在函数内部。

    def job(lk):
        try:
            session = requests.session()
    
            headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
            r = session.get("https://www.example.com/login/")
            post = session.post('https://www.example.com', data={"log": "name",
                                                                           "pwd": "name",},
                                                                            headers=headers)
            rGet = session.get('https://www.example.com')
    
    
        except requests.exceptions.ConnectionError:
            print("Failed 2")
        except requests.exceptions.TooManyRedirects:
            print("Failed 3")
    

    【讨论】:

    • try/catch 在函数内部只是粘贴时出错
    【解决方案4】:

    正如布鲁诺所说,try/except 应该在函数内部(或包裹在调用函数的代码周围)。

    原因是函数调用运行时发生异常;而您的 try/except 块仅捕获在声明函数时引发的错误,而不是在它运行时。

    如果您不了解其中的区别,您应该尝试更好地了解函数在您用来学习 Python 的书籍/文档/课程中的工作原理。

    【讨论】:

    • try/catch 在函数内部它只是在这里发布时出错
    【解决方案5】:

    也许你没有得到你认为你得到的异常。使用通用 except 运行您的代码,以确定引发的异常类型:

    except Exception as exc:
        print(type(exc), str(exc))
    

    【讨论】:

      【解决方案6】:

      在我看来,向您抛出的异常是 newConnectionError,首先要捕获它(以便更好地处理异常)

      其次,在异常中它告诉您它超过了使用 url 的最大重试次数,用户名、密码是否正确?以及您尝试连接的服务器的参数“log”:“name”“pwd” :“名称”

      更好的异常处理代码:

      def job(lk):
          try:
              session = requests.session()
      
              headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
              r = session.get("https://www.example.com/login/")
              post = session.post('https://www.example.com', data={"log": "name",
                                                                         "pwd": "name",},
                                                                          headers=headers)
              rGet = session.get('https://www.example.com')
      
          except NewConnectionError as nCE:
              print f"failed 1 - NewConnection error: {nCE}"
      
          except requests.exceptions.ConnectionError as C:
              print "Failed 2"
      
          except requests.exceptions.TooManyRedirects:
              print "Failed 3"except NewConnectionError:
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-05
        • 1970-01-01
        • 2014-08-05
        • 1970-01-01
        • 1970-01-01
        • 2019-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多