错误324空响应 - AttributeError:'NoneType'对象没有属性'select'

时间:2014-06-02 16:43:54

标签: python django nonetype

我正在运行Python 2.7.3和Django 1.5.8。我正在尝试为新安装“它工作”。我从Chrome获得错误324

Unable to load the webpage because the server sent no data.
Error code: ERR_EMPTY_RESPONSE

当我杀死服务器时,我得到以下追溯:

0 errors found
June 02, 2014 - 06:39:55
Django version 1.5.8, using settings 'fed1.settings.dev'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
♥Unhandled exception in thread started by <bound method Command.inner_run of     <django.contrib.staticfiles.management.commands.runserver.Command object at 0x19fd950>>

Traceback (most recent call last):
File "/home/vagrant/fed1-venv/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 115, in inner_run
ipv6=self.use_ipv6, threading=threading)
File "/home/vagrant/fed1-venv/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 186, in run
httpd.serve_forever()
File "/usr/lib/python2.7/SocketServer.py", line 225, in serve_forever
r, w, e = select.select([self], [], [], poll_interval)
AttributeError: 'NoneType' object has no attribute 'select'

我在某处读到过这个错误与Python 2.5.1有关并且在2.5.2中消失了。我现在找不到。它一定是在code.djangoproject.com中的某个地方,但也许这不是同一个问题。

我看到How to 'clear' the port when restarting django runserver人们说服务器已经在运行,所以我尝试了这个解决方案:

(fed1-venv)vagrant@precise64:/vagrant/fed1$ ps aux | grep -i manage
vagrant  10113  0.0  0.2  11676   940 pts/0    S+   14:57   0:00 grep --color=auto -i manage

然后尝试将它带到前台杀死但是:

(fed1-venv)vagrant@precise64:/vagrant/fed1$ fg
bash: fg: current: no such job

这也不是我的问题。

Django - Strange behavior using static files使用网址格式解决了类似的错误 - 但我还没有。我只是想让'它奏效'。我看到的大多数关于此错误的人都已经在生产中启动并运行了网站。

我看了socketserver.py,但我还不够先进,无法解释。

1 个答案:

答案 0 :(得分:4)

不要担心异常,你可以放心地忽略它。你的服务器已经退出了,虽然有点混乱。

在关闭时,Python会清除全局名称,以防止循环依赖性阻止最终化。它通过重新绑定它们None来实现。

您正在使用键盘中断(CTRL-C)关闭服务器,从而触发完成。与此同时,serve_forever线程仍在运行它的套接字轮询循环,但select模块中的SocketServer全局已经被反弹。因此,select.select()的查找失败。

如果这困扰你,请升级到Python 3.4。根据{{​​3}},此版本不再将全局变量设置为None(在大多数情况下);见Safe Object Finalization

至于您的Chrome错误代码和其他问题,某些内容已绑定到您尝试用于Django的端口。这与您在select.select()电话中看到的例外情况完全不同。可能是另一个软件正在抓住该端口,这些东西不响应HTTP请求(导致Chrome错误响应)。

请参阅PEP 442(Linux)或Determining what process is bound to a port(Mac)以解决该问题。