一些常见的问题错误及解决方式

一、数据库
报错码:
1、error10013 就是端口被占用,换个端口就OK。
2、error10061 就是数据库没打开。
3、error10053的问题是与socket有关,但是不记得怎么解决的了,改天再补。但是请仔细检查该段代码及逻辑。

4、报错:

ignoring query to other database

原因是连接mysql时没有加"-u"参数,我输入的时候输成了

mysql -root -p

5、执行truncate的时候报ERROR 1701错,原因是有外键约束:在这里插入图片描述
解决方法参考:https://www.2cto.com/database/201302/187892.html
先在MySQL里执行SET foreign_key_checks=0;
然后就可以成功删除了,删除完之后,再执行一遍上述命令,值改为1:SET foreign_key_checks=1;

在这里插入图片描述
6、在Django中使用SQL语句报错:

Illegal mix of collations for operation 'like'

原因:意思是使用like匹配时报错,大部分文档都有提到在 MySQL 5.5 以上,若字段 Type 是 time,date,datetime 这种时间类型时,使用 like '%str%'去匹配中文就会报这样的错,这些文档都告诉我们要加个binary即可,一般都加在了like后。而事实上,在MySQL的shell脚本里执行确实没有出错,然而在Django里调用的时候却出错了,报的就是以上的错。终于看到这篇,将binary加在了字段前。

解决办法:

select * from table where cdate like binary '%你好%'

或者(在框架里建议)

select * from table where binary cdate like '%你好%'

二、前端

1、背景色不显示。
如果子div都有浮动的话,父div的背景色不会显示,只需要给它一个overflow设为hidden。
overflow 属性规定当内容溢出元素框时发生的事情。

三、flask
1、query对象才能filter
错误代码:

UndefinedError: 'sqlalchemy.orm.collections.InstrumentedList object' has no attribute 'filter_by'

原因:这个错是说,InstrumentedList是继承自列表对象,而list并没有这个过滤的属性,而只有Query才有过滤,所以我们要将
InstrumentedList对象转换成一个query对象,它是dynamic下的AppendBaseQuery,是一个查询对象,继承自Query。

解决方式:将涉及到的字段,在模型中将它的backref的lazy模式改为dynamic。比如:

author = db.relationship('FrontUser', backref=db.backref('comments',lazy='dynamic'))

2、HTML的{% block %}{% end block %}标签没有结束

expected token 'name', got 'end of statement block'

一般就是block没有取名字,或者没有end结束。学过Python web框架的就知道,问题也不是很大。

3、端口地址被占用

[Errno 48] Address already in use 

这个问题其实之前在写自己的项目在本地运行的时候也碰过,当时没有部署,只是在本地调试,问题只要切换端口就好了。

直到后来部署远程调试,弄了很久也没弄好。百度谷歌搜了一大堆,全都是说什么kill进程,或者socket默认不支持地址复用,要修改代码之类的。我知道说的原理是对的,但我这里绝对不是要修改socket。

首先,我的项目是一个补丁包的项目,用于更新和修复漏洞。里面用到了RESTful-API
整个项目是由多个框架搭建的,其中补丁包的服务是flask框架搭的,部署是Nginx。

补丁包这个项目所显示的前端页面给了一个固定的端口5000,而之所以冲突是因为后端里默认设置的端口也是5000。

起初我并没有觉得什么不对,我以为它就是这么通信的,后来发现前端和后端之间是通过RESTful进行关联的,与端口没有关系,反倒是端口互相冲突了。当前端已经启用,我后端再去启动这个进程,就会出现譬如[Errno 48] Address already in use 之类的错误。

最后我解决的办法就是去修改前端的端口,仅是在自己的节点上做测试解决bug才这么做,后期改回来就好了。

可能我们碰到的问题不完全一样,他们的对我没有用,我的方法大家也不一定适用。但几乎就是端口的问题。如果是很简单的本地的项目就修改调试的端口,如果是远程,你可以查看/etc/nginx/conf.d/下的对应的.conf文件。

四、Python:
1、错误代码:

sequence item 2: expected string or Unicode, NoneType found

原因:这种问题一般是把本应是str的字符int或其他方式输出了。
解决:这时str(var)即可,var就是相关的对象名

2、导入模块若失败,如果确定已安装,一般就是模块名写错了。当然,前提是相关的模块都存在,确定它可以运行,它只是不存在的话,先检查包是否在site-package下,如果确实在但导入不了,就是模块名写错了,不要觉得自己肯定不会犯这种小错误。

但是有些相关的如scrapy这种有许多相关的模块需要安装,这种问题请自行百度解决,要不然就去下个anaconda集成环境,或者Portable便携版,里面装好了基本的模块,包括pycharm等一些IDE。

3、有意外的字符,中文逗号之类的

unexpected char u'\uff0c' at 580

有意外的字符,一般是出现了中文的逗号。大多出现在使用json包处理json数据时,容易出现

4、列表名字写错

'list object' has no attribute 'xxx'或者 'item' is undefined

都是可能遍历了却写错了遍历后的元素名称,检查一下

5、遇到编码问题

ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128)

只需要在最前面加上

import sys

reload(sys)
sys.setdefaultencoding('utf8')

或是在最前面加上

# -*- coding:utf-8 -*-

# coding=utf-8

另一个解码问题:

'ascii' codec can't encode character u'\u5e74' in position 4: ordinal not in range(128)

这个问题的原因,我看书上是这么解释的,当你没有指定编码的时候,默认解码是ASCII码,然而要使用这种方式,必须保证字符串中仅包含ASCII字符集里的字符,不含有任何其他的Unicode字符,否则就会出现这种错误。
在需要编码的对象后加上

.encode('utf-8')

五、IDE:
1、使用IDE,不管sublime或者pycharm什么的,如果代码明明没有问题,单独将它拿出来运行或者在另一台机器上或编辑器上都没有问题的话,那么检查一下你文本存放的路径是否有中文。

六、浏览器:
1、Google右键搜索:如果搜索的是英文或数字就会出现人机验证,说什么流量异常,但是输入中文就不会。如果非要输入英文,验证时勾上即可。另也有说,禁用ipv6即可。但是Google+是除了改了hosts文件之外,用ipv6网可以访问。

所以尽量不要在用Google搜索的时候在搜索框里纯输入英文或纯数字,哪怕加个中文也行。

2、远程桌面上不能谷歌浏览器,而其他浏览器都可以正常访问。
解决:在本机上关闭谷歌浏览器,不允许两端同时使用。

七、安装数据库或其他时容易出现的错误
1、发生系统错误2。
这是因为你之前已经装过一次,并且两次安装目录不同,就绝对会碰到的,因为你之前安装的路径已经在注册表中生成了,并没有随着你的卸载而清除。 这个需要修改注册表。具体参见我的另一篇博客:
http://blog.csdn.net/qq_28304687/article/details/70184437

2、发生系统错误5。
这是没有管理员权限,右键cmd使用管理员身份打开即可。

八、celery

使用celery报错error87,是因为celery4不支持Windows系统。使用pip重新安装的时候,安装3.1.18以上版本似乎不成功,可能是因为网速问题,可以尝试重新运行一次命令,我就装3.1.16的了,使用pip卸载和安装命令

# 卸载
pip uninstall celery 

# 安装1.16版本的
pip install celery==3.1.16 

九、内存
当你电脑加多一根内存条后,如果能开机,电源指示灯有亮,屏幕却不能显示,那么可以尝试将新买的内存条和原来的调换一下位置,就可以了。

十、DNS,代理修改

有的时候电脑会出现明明连上了网,却不能用,有时可以登QQ却偏偏打不开浏览器,这种时候除了修改DNS之后,还有一种方法,尤其你使用的是chrome浏览器的话,可以在设置-高级里找到代理设置,然后会弹出一个窗口,是Internet属性,窗口和IE的一样,然后找到局域网设置,

这里写图片描述

看到右边,代理服务器,默认是打钩的,只要将它前面的勾取消掉,然后确定,再回到网页刷新就好了。

posted @ 2017-04-15 15:30  苏酒酒  阅读(64)  评论(0编辑  收藏  举报