1. 程式人生 > >一些常見的問題錯誤及解決方式

一些常見的問題錯誤及解決方式

一、資料庫
報錯碼:
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;

在這裡插入圖片描述

二、前端

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的一樣,然後找到區域網設定,

這裡寫圖片描述

看到右邊,代理伺服器,預設是打鉤的,只要將它前面的勾取消掉,然後確定,再回到網頁重新整理就好了。