日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

玩Python遇到的问题一二三及解决办法

發(fā)布時間:2023/12/20 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩Python遇到的问题一二三及解决办法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 問題一:python 2.7版本解決TypeError: 'encoding' is an invalid keyword argument for this function。
  • 問題二:python讀取文件時提示"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence"
    • 情景一:
    • 情景二:
  • 問題三:python執(zhí)行SQL報錯:not enough arguments for format string
  • 問題四:輸出的信息為轉(zhuǎn)義碼
  • 問題五:使用list的clear()方法時的注意點(diǎn)
  • 問題六:Python下調(diào)用json.dumps中文顯示問題解決辦法
  • 問題七:報錯:pymysql.err.OperationalError: (1040, 'Too many connections')
  • 問題八:ValueError: invalid literal for int() with base 10: “”
  • 問題九:解決python中TypeError: not enough arguments for format string
  • 問題十:消除python中控制臺輸出的警告信息
    • 問題十一:報錯:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

最近要頻繁的玩Python,在這里總結(jié)下遇到的一些問題,持續(xù)更新中。

問題一:python 2.7版本解決TypeError: ‘encoding’ is an invalid keyword argument for this function。

用Python2.7來打開一些文件的時候,經(jīng)常出現(xiàn)以上的所表示的問題,如

data_file = open("F:\\MyPro\\data.yaml", "r", encoding='utf-8')

運(yùn)行的時候報錯:TypeError: ‘encoding’ is an invalid keyword argument for this function。但在Py3中運(yùn)行卻不會遇到這樣的問題
解決辦法:網(wǎng)上查找一番后,改成如下這樣就可以搞定

import io data_file = io.open("F:\\MyPro\\data.yaml", "r", encoding='utf-8')

至于原因根據(jù)報錯的信息看也許跟Py2和Py3的API規(guī)定不同有關(guān)吧。

問題二:python讀取文件時提示"UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 205: illegal multibyte sequence"

情景一:

同樣是讀取文件時,碰到的編碼問題。
解決辦法:

FILE_OBJECT= open('order.log','r', encoding='UTF-8')

只需要加入對應(yīng)的encoding參數(shù)就OK了,對于Python中的編碼問題,有時候也很麻煩。不過這類問題一般百度下就能找到對應(yīng)的解決辦法。

情景二:

突然在用pandas讀取別人的.csv數(shù)據(jù)的時候出現(xiàn)了一種奇怪現(xiàn)象:用Python2的解釋器時可以讀取,用python3的解釋器卻無法讀取。報上面的錯誤,后來在方法中添加encoding參數(shù)依舊不可行,之后查閱資料才知道,原來是.csv文件本事的格式問題,首先確保你的.csv是utf8編碼(用notepad打開.csv文件查看文件編碼格式),其次要確保你的.csv在保存的時候也是.csv utf-8格式(可以再重新打開.csv文件再保存為.csv utf-8格式),如下圖所示:

問題三:python執(zhí)行SQL報錯:not enough arguments for format string

在Python中執(zhí)行SQL的查詢語句的時候爆出這樣的錯誤,如
sql='select * from Teacher where Tname like \'%%'+ keyword +'%%\''。后來才知道出現(xiàn)這類問題,主要是字符串中包含了%號,python 認(rèn)為它是轉(zhuǎn)移符,而實(shí)際我們需要的就是%, 這個時候,可以使用%%來表示%,也就是說sql字符串中的百分號全都要用%%來表示。

問題四:輸出的信息為轉(zhuǎn)義碼

# ((u'01', u'\u5f20\u4e09'), (u'04', u'\u5f20\u4e09\u4e30')) # (u'01', u'\u5f20\u4e09')

這種情況也只有在Py2中才會出現(xiàn),Py3中是不會出現(xiàn)的。
解決辦法:將輸出的轉(zhuǎn)義碼通過以下的eval方法轉(zhuǎn)化為對應(yīng)的中文。

print(eval("u"+"\'"+exmple[1]+"\'"))

問題五:使用list的clear()方法時的注意點(diǎn)

最近在寫一段如下代碼時:

for line in lines:# print(line)for x in jieba.lcut(line):# print(x)if x not in stopwords:text1.append(x)text2=text1corpora_documents.append(text2)# print(corpora_documents)text1.clear()

這里由于類型轉(zhuǎn)化問題不能采用簡便的方法來直接分詞并剔除停詞,所以只能用這種方式來實(shí)現(xiàn)相同的功能,但是在實(shí)現(xiàn)的過程中,原本期望返回的corpora_documents是下圖所示的效果:

但是卻得到了一組空的List。這讓博主很是郁悶(畢竟博主之前是寫Java的,面相對象的思想“根深蒂固”,以為聲明出來一個新的text2對象,就會開辟一塊新的內(nèi)存空間來存儲text2的內(nèi)容,這樣text1和text2也就是值傳遞了而非引用傳遞,可是這是java的內(nèi)存加載機(jī)制。。。),不過后來隨著博主無意間將最后一行代碼改為:

text1=[]

得到了自己想要的結(jié)果,之后再分析原因的時候,發(fā)現(xiàn)博主沒有切換到Python的內(nèi)存管理機(jī)制。其實(shí)整個過程對于Python來說內(nèi)存管理如下:

for line in lines:# print(line)for x in jieba.lcut(line):# print(x)if x not in stopwords:text1.append(x)text2=text1#相當(dāng)于將聲明的兩個對象的指針指向同一塊內(nèi)存空間即text1所在的內(nèi)存空間corpora_documents.append(text2)#Python采用的應(yīng)該是延遲加載,也就是說這里corpora_documents只是將指針指向了text2的內(nèi)存地址,并沒有直接就將text2里面的內(nèi)容加載進(jìn)來。# print(corpora_documents)text1.clear()#clear()就相當(dāng)于擦除了text1中的內(nèi)容,即text2指向了一個空的內(nèi)容,由于Python延遲加載的特性也就造成了后面打印出來的corpora_documents的內(nèi)容為空print(corpora_documents)

所以在使用clear()的時候一定要注意對象之間的關(guān)系,一不留神就會造成很大的損失。感覺這個問題好像在那本書中有提到,還得復(fù)習(xí)下基礎(chǔ)知識,很多問題只有不斷的Coding才能碰到,還是實(shí)踐太少,仍需繼續(xù)努力。

問題六:Python下調(diào)用json.dumps中文顯示問題解決辦法

最近在開發(fā)某個功能的時候,需要將前臺的信息返回到后天處理后,以json字符串的形式返回,但是返回的內(nèi)容顯示在網(wǎng)頁中確實(shí)ASCII碼值,下面是這個問題的解決辦法:
配置下dumps方法中的ensure_ascii這個屬性!

data={"url":"http:www.dianwe.com","content":"采集Test","CreateTime":"2014-07-08 23:29"} bizResult= json.dumps(data, ensure_ascii=False) print(bizResult)

這樣便不會轉(zhuǎn)為Ascii 編號了!

問題七:報錯:pymysql.err.OperationalError: (1040, ‘Too many connections’)

mysql數(shù)據(jù)庫 Too many connections
出現(xiàn)這種錯誤明顯就是 mysql_connect 之后忘記 mysql_close;我的情況是實(shí)現(xiàn)了自動更新本地數(shù)據(jù)庫在測試的時候每次更新后又忘記關(guān)閉對應(yīng)的connect,當(dāng)大量的connect之后,就會出現(xiàn)Too many connections的錯誤,mysql默認(rèn)的連接為100個。只需在代碼中添加對應(yīng)的connect.close()方法即可。

問題八:ValueError: invalid literal for int() with base 10: “”

最近在寫代碼的時候,突然爆出這樣錯誤,根據(jù)字面意思是類型轉(zhuǎn)化的問題,但是仔細(xì)檢查了代碼,發(fā)現(xiàn)類型轉(zhuǎn)化沒有問題。無奈只能去求助度娘,很多博客也說是類型轉(zhuǎn)換的問題。以下是某博客的一個實(shí)驗(yàn):

>>> int('') Traceback (most recent call last):File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '' >>>>>> int("x") Traceback (most recent call last):File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'x'

從中可以看出這類錯誤就是字符無法轉(zhuǎn)換為int型。但是仍找不到對應(yīng)的錯誤的位置在哪里,剛好看看到一個建議:“為了避免類似錯誤,以后進(jìn)行int類型轉(zhuǎn)換時,注意檢查,或者直接加try 捕獲下”

# try:# print(int(re.sub("\D", "", x)))# except ValueError:# print("-"*40)# print("異常值"+x)

一查竟讓多出了一些nan值:

但是后來去和數(shù)據(jù)做比對的時候,實(shí)在是也沒有發(fā)現(xiàn)有什么nan值,這就很奇怪了,所以為了能讓程序跑下去,這里就先省去了這個int的強(qiáng)制變換。

問題九:解決python中TypeError: not enough arguments for format string

出現(xiàn)這類問題,主要是字符串中包含了%號,python 認(rèn)為它是轉(zhuǎn)移符,而實(shí)際我們需要的就是%, 這個時候,可以使用%%來表示

問題十:消除python中控制臺輸出的警告信息

程序運(yùn)行中經(jīng)常會碰到python控制臺顯示警告提示SettingWithCopyWarning的信息,一般來說沒什么大事,但是當(dāng)這些信息多了之后就會干擾你查看一些關(guān)鍵信息的效率,那么如何讓控制臺不提示這類告警呢?很簡單只需在代碼中添加以下兩行代碼即可:

import warnings warnings.filterwarnings("ignore")

問題十一:報錯:UnicodeDecodeError: ‘a(chǎn)scii’ codec can’t decode byte 0xe5 in position 0: ordinal not in range(128)

使用python2.x的時候,即使在代碼頭部聲明了encoding=“utf-8”,但是程序執(zhí)行的時候仍會報這個錯誤,這時候只需要在頭部添加如下代碼即可

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

ps:python3.x一般就不會出現(xiàn)這種情況!

總結(jié)

以上是生活随笔為你收集整理的玩Python遇到的问题一二三及解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。