python文件頭部聲明#coding=utf-8問題
一、python2和python3默認(rèn)編碼
python2默認(rèn)的編碼格式是ASCII格式,python3默認(rèn)的編碼格式是utf-8格式。
pycharm控制臺(tái)輸入如下命令,可以獲取當(dāng)前python環(huán)境下的默認(rèn)編碼格式
//python2環(huán)境 >>import sys >>sys.getdefaultencoding() >>'ascii'
//python3環(huán)境 >>import sys >>sys.getdefaultencoding() >>'utf-8'
二、# coding=utf-8
在python2環(huán)境中編寫python代碼時(shí),如果代碼(或者注釋)有中文,需要在python文件的開頭加入
# -*- coding: UTF-8 -*- 或者 # coding=utf-8
注意:# coding=utf-8 的 = 號(hào)兩邊不要空格。
如果未指定編碼格式,使用默認(rèn)編碼格式ASCII碼,那么在執(zhí)行該文件時(shí),會(huì)出現(xiàn)報(bào)錯(cuò):
s = "中文" print(s)
E:\PycharmProjects\LEDdisplay2\venv\Scripts\python.exe E:/PycharmProjects/LEDdisplay2/2.py
File "E:/PycharmProjects/LEDdisplay2/2.py", line 1
SyntaxError: Non-ASCII character '\xe4' in file E:/PycharmProjects/LEDdisplay2/2.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for detailsProcess finished with exit code 1
python3環(huán)境中,源碼文件默認(rèn)使用utf-8編碼,可以正常解析中文,不需要開頭加上面的代碼,但是為了代碼的可移植性,建議在編寫程序的時(shí)候加上。
另外,使用編輯器編寫python程序時(shí),還需要設(shè)置py文件存儲(chǔ)的格式為UTF-8,否則會(huì)出現(xiàn)亂碼或者報(bào)錯(cuò)。
三、#!/usr/bin/env python
一般在python文件的開頭第一行,我們都會(huì)看到下面的代碼行
- python2
#!/usr/bin/env python 或者 #!/usr/bin/python
- python3
#!/usr/bin/env python3 或者 #!/usr/bin/python3
這行代碼只對(duì) Linux/Unix 用戶適用,用來指定本腳本用什么解釋器來執(zhí)行。
其他環(huán)境下等同于注釋。
為了代碼的可移植性,建議在編寫程序的時(shí)候加上。
1.這行代碼是什么意思?
要理解這行代碼,需要把這一行語(yǔ)句拆分成兩個(gè)部分
- 第一部分是 #!
- 第二部分是 /usr/bin/env python
關(guān)于 #! 這個(gè)符號(hào),叫做shebang或者sha-bang,有的翻譯組將它譯為 釋伴,即“解釋伴隨行”的簡(jiǎn)稱,同時(shí)又是shebang的音譯。
Shebang通常出現(xiàn)在類Unix系統(tǒng)的腳本中第一行,作為前兩個(gè)字符。在Shebang之后,可以有一個(gè)
或數(shù)個(gè)空白字符,后接解釋器的絕對(duì)路徑,用于指明執(zhí)行這個(gè)腳本文件的解釋器。
2.#!/usr/bin/python和#!/usr/bin/env python的區(qū)別
- #!/usr/bin/python 是告訴操作系統(tǒng)執(zhí)行這個(gè)腳本的時(shí)候,調(diào)用 /usr/bin 下的 python 解釋器。
- #!/usr/bin/env python 這種用法是為了防止操作系統(tǒng)用戶沒有將 python 裝在默認(rèn)的 /usr/bin 路徑里。當(dāng)系統(tǒng)看到這一行的時(shí)候,首先會(huì)到 env 設(shè)置里查找 python 的安裝路徑,再調(diào)用對(duì)應(yīng)路徑下的解釋器程序完成操作。
- #!/usr/bin/python 相當(dāng)于寫死了 python 路徑。
- #!/usr/bin/env python 會(huì)去環(huán)境設(shè)置尋找 python 目錄,可以增強(qiáng)代碼的可移植性,推薦這種寫法。
有這句的,加上執(zhí)行權(quán)限后,可以直接用 ./ 執(zhí)行,不然會(huì)出錯(cuò),因?yàn)檎也坏?python 解釋器。
- 調(diào)用方法1:
python script.py
#!/usr/bin/python 被忽略,等同于注釋
- 調(diào)用方法2:
./script.py
#!/usr/bin/python 指定解釋器的路徑
四、#!/usr/bin/env python和# coding=utf-8
為了代碼能夠在linux和windows環(huán)境下都可以運(yùn)行,中文編碼不報(bào)錯(cuò),建議在編寫python程序時(shí),在文件開頭加上這兩句。
#!/usr/bin/env python # coding=utf-8
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Python中的if __name__ == __main__詳情
在學(xué)習(xí)Python的過程中發(fā)現(xiàn)即使把if __name__ == ‘__main__’ 去掉,程序還是照樣運(yùn)行。很多小伙伴只知道是這么用的,也沒有深究具體的作用。這篇文字就來介紹一下Python中的if __name__ == ‘__main__’的作用,需要的朋友參考下文2021-09-09
python OpenCV的imread不能讀取中文路徑問題及解決
這篇文章主要介紹了python OpenCV的imread不能讀取中文路徑問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Python實(shí)現(xiàn)可設(shè)置持續(xù)運(yùn)行時(shí)間、線程數(shù)及時(shí)間間隔的多線程異步post請(qǐng)求功能
這篇文章主要介紹了Python實(shí)現(xiàn)可設(shè)置持續(xù)運(yùn)行時(shí)間、線程數(shù)及時(shí)間間隔的多線程異步post請(qǐng)求功能,涉及Python網(wǎng)絡(luò)請(qǐng)求的創(chuàng)建、發(fā)送、響應(yīng)、處理等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Python?庫(kù)?PySimpleGUI?制作自動(dòng)化辦公小軟件的方法
Python?在運(yùn)維和辦公自動(dòng)化中扮演著重要的角色,PySimpleGUI?是一款很棒的自動(dòng)化輔助模塊,讓你更輕松的實(shí)現(xiàn)日常任務(wù)的自動(dòng)化,下面通過本文給大家介紹下Python?庫(kù)?PySimpleGUI?制作自動(dòng)化辦公小軟件的過程,一起看看吧2021-12-12
解決tf.keras.models.load_model加載模型報(bào)錯(cuò)問題
這篇文章主要介紹了解決tf.keras.models.load_model加載模型報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Python實(shí)現(xiàn)RabbitMQ6種消息模型的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)RabbitMQ6種消息模型的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

