python - 处理 Python 套接字中的超时错误

标签 python sockets exception error-handling

我正在尝试弄清楚如何使用 tryexcept 来处理套接字超时。

from socket import *

def main():
    client_socket = socket(AF_INET,SOCK_DGRAM)
    client_socket.settimeout(1)
    server_host = 'localhost'
    server_port = 1234
    while(True):
        client_socket.sendto('Message',(server_host,server_port))
        try:
            reply, server_address_info = client_socket.recvfrom(1024)
            print reply
        except socket.Timeouterror:
            # More code

我添加socket模块的方式是全部导入,但是异常怎么处理呢?

在文档中说您可以使用 socket.timeouterror,但这对我不起作用。另外,如果我执行了 import socket,我将如何编写 try 异常 block ?进口有什么区别?

最佳答案

from foo import *

foo 中不带前导下划线的所有名称(或仅在模块 __all__ 属性中定义的名称)添加到当前模块中。

在上面带有 from socket import * 的代码中,您只想在将 timeout 拉入当前命名空间时捕获 timeout .

from socket import * 引入 socket 内所有内容的定义,但它不添加 socket 本身。

try:
    # Socket stuff
except timeout:
    print 'caught a timeout'

许多人认为 import * 有问题并试图避免它。这是因为以这种方式导入的两个或多个模块中的公共(public)变量名会相互冲突。

例如,考虑以下三个 Python 文件:

# File "a.py"
def foo():
    print "this is a's foo function"

# File "b.py"
def foo():
    print "this is b's foo function"

# File "yourcode.py"
from a import *
from b import *
foo()

如果你运行 yourcode.py,你只会看到输出“这是 b 的 foo 函数”。

出于这个原因,我建议要么导入模块并使用它,要么从模块中导入特定名称:

例如,带有显式导入的代码如下所示:

import socket
from socket import AF_INET, SOCK_DGRAM

def main():
    client_socket = socket.socket(AF_INET, SOCK_DGRAM)
    client_socket.settimeout(1)
    server_host = 'localhost'
    server_port = 1234
    while(True):
        client_socket.sendto('Message', (server_host, server_port))
        try:
            reply, server_address_info = client_socket.recvfrom(1024)
            print reply
        except socket.timeout:
            # More code

只是打字多了一点点,但一切都是明确的,读者很清楚一切的来源。

关于python - 处理 Python 套接字中的超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865685/

相关文章:

Python:仅在图像蒙版内执行模糊

python - 在 flask 请求中发送 flask 请求

python - 从 REST API 获取数据并将其存储在 HDFS/HBase 中

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

php - 获取异常的 'friendly' 错误消息

python - 如何在 cython 中执行 struct.pack 和 struct.unpack?

使用 inet_ntop() 和 inet_pton() 转换 IP 地址输入(C 编程)

java - 有什么方法可以使用客户端套接字连接在服务器端获取客户端的计算机名称?(例如:-Windows-PC)

java - 套接字关闭与输入流关闭

java - 处理异常的问题