Skip to content

Is the timeout and TimeoutError intended to be different? #197

Closed
@Stwerp

Description

@Stwerp

Some students are having issues with their systems running for lengths longer than an hour or so. We've been able to catch some errors, and it seems that a solution like: #170 (comment) is the best idea so far and wrapping everything related to the actual sending of the GET/POST call in a try block

try:
    [...]
except (ValueError, RuntimeError, ConnectionError, OSError, TimeoutError) as e:
   [... handle reset and retry]

However, we've also seen students have a timeout error coming from

This error is different than a TimeoutError that, for example, might come from

raise TimeoutError("Failed to establish connection")

Is this an intentional difference? It seems to be, given the class definition on these lines

class timeout(TimeoutError):
"""TimeoutError class. An instance of this error will be raised by recv_into() if
the timeout has elapsed and we haven't received any data yet."""
def __init__(self, msg):
super().__init__(msg)

I'm just not understanding why. If this is the case, then we should be catching a TimeoutError as well as a timeout error, so our except block would have this:

try:
    [...]
except (ValueError, RuntimeError, ConnectionError, OSError, TimeoutError, timeout) as e:
   [... handle reset and retry]

That seems a little strange to me, but I just wanted to check (and also be able to tell students why they need to catch both those errors).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions