相同的错误代码

2 投票
1 回答
979 浏览
提问于 2025-04-15 12:05

我在Linux上使用的是Python 2.4.1,并且使用了一个我们公司内部开发的Python包,用来在两个主机之间建立连接进行测试。

在建立连接时,作为客户端的一方在调用socket.connect时出现了错误,虽然我检查过参数是正确的,但还是得到了错误代码111。通过在网上查找这个错误代码的含义,我了解到它表示连接被主动拒绝。

但是,这个包里的代码本来是应该处理这种情况的,只不过它知道的错误代码是10061,表示连接被拒绝。

难道对于同样的逻辑错误,会有相同的错误代码吗?111可能是Linux操作系统的系统错误,而10061是Python的,或者是其他操作系统的?即便如此,错误代码的整个概念不就是为了用相同的代码来统一逻辑错误吗?

我是不是应该简单地把111这个错误代码加到处理条件里呢?

1 个回答

6

看起来Python在显示操作系统的错误代码,而这些代码的含义是跟操作系统有关的。

在很多Linux系统和Cygwin上,111这个代码代表的是ECONNREFUSED

在Solaris系统上,146也代表ECONNREFUSED

在Windows的错误代码中,10061是WSAECONNREFUSED,这是Windows Socket API对ECONNREFUSED的版本。

在其他系统上,这些代码可能又会不同。

处理这些错误的正确方法是根据操作系统对ECONNREFUSED的定义来进行符号比较;比如在C语言中就是这样做的。换句话说,你应该有一个叫做ECONNREFUSED的常量,它的值对应于该平台的ECONNREFUSED,放在一个特定于平台的库中(无论如何,这个库是需要链接到操作系统的socket基本功能的),然后用这个ECONNREFUSED常量来比较错误代码,而不是直接用那些神秘的数字。

我不太清楚Python处理操作系统错误代码的标准方法是什么。我怀疑它可能没有经过很好的设计。

撰写回答