Python編程常見問題與解答

2021-01-14 Python小屋

1.問:Python代碼運行速度和C語言相比,哪個更快?

答:一般來說,Python代碼的運行速度比C語言的慢很多,但是如果充分運用內置函數、標準庫對象和函數式編程模式的話,運行速度會提高很多,可以接近C語言。

2.問:學習Python編程,用哪個開發環境更好一些呢?

答:目前來看,Anaconda3和PyCharm用的相對來說多一些。

3.問:在哪裡執行pip命令安裝Python擴展庫?為什麼在IDLE中執行會提示語法錯誤呢?

答:應該在命令提示符環境執行,不是在Python開發環境中執行。並且,最好切換到Python安裝目錄中的scripts子目錄中執行,在安裝了多個Python版本時這一點非常重要。

4.問:為什麼使用pip命令安裝擴展庫是提示「不是內部或外部命令,也不是可運行的程序或批處理文件」?

答:檢查系統環境變量path是否包含Python的安裝目錄以及scripts子目錄,如果不包含的話,添加進去,或者切換到Python安裝目錄的scripts子目錄中執行pip命令。

5.問:使用pip安裝擴展庫總是提示網絡超時,該怎麼辦呢?

答:可以下載安裝包或whl文件離線安裝,或者指定國內源,不使用pip默認的國外源。

6.問:使用pip安裝擴展庫時失敗,提示需要安裝VC++,該怎麼辦呢?

答:如果是Windows系統的話,可以使用瀏覽器打開https://www.lfd.uci.edu/~gohlke/pythonlibs/下載合適版本的whl文件,然後離線安裝。

7.問:我在https://www.lfd.uci.edu/~gohlke/pythonlibs/下載的文件名太長了,為了打字方便就改成了很短的名字,結果不能用了,必須使用原來的文件名嗎?

答:是的,不能修改文件名,必須保持原來的名字。

8.問:使用pip安裝擴展庫時,明明提示已經安裝成功了,但是使用import導入時又提示沒有安裝該擴展庫,為什麼呢?

答:這樣的情況一般是因為安裝了多個Python版本。在一個版本下安裝的擴展庫不能在另一個版本中使用,需要分別進行安裝。

9.問:map對象不支持下標嗎?為什麼使用下標訪問其中的元素時提示「TypeError: 'map' object is not subscriptable」呢?

答:是的,map對象、enumerate對象、zip對象、filter對象、reversed對象和生成器對象這些具有惰性求值特點的對象都不支持使用整數下標訪問其中的元素。可以把這類對象轉換為列表、元組來一次性獲取其中的元素,或者使用for循環逐個遍歷其中的元素。

10.問:訪問列表中元素時,提示「IndexError: list index out of range」,這是什麼原因呢?

答:應該是下標指定的位置不存在,檢查下標是否有效。一個長度為L的列表,有效下標範圍是[-L, L-1]。

11.問:在我的代碼中x是一個列表,我使用y=x.sort()語句把它排序後的結果賦值給y,然後使用y.index(3)查看3在y中的下標時,為什麼會提示「AttributeError: 'NoneType' object has no attribute 'index'」呢?

答:列表的sort()方法是原地排序,沒有返回值。在Python中,沒有返回值的方法,都認為返回空值None,而空值是沒有index()方法的。

12.問:我創建了一個集合,想在裡面加入一個列表作為元素,結果提示「TypeError: unhashable type: 'list'」,這是什麼意思呢?

答:在Python中,不可哈希(unhashable)和可變的意思是一樣的。整數、實數、複數、字符串、元組這些是不可變的,或者說是可哈希的。而列表、字典、集合是可變的,或者說是不可哈希的。字典的「鍵」和集合的元素都要求必須是不可變的,也就是可哈希的。

13.問:我調用函數時提示「TypeError: f() missing 2 required positional arguments: 'a' and 'b'」,該怎麼辦呢?

答:調用函數時,位置參數的數量必須符合函數定義,如果函數要求接收2個位置參數,那麼調用時也應傳遞2個位置實參。

14.問:運行代碼時提示「SyntaxError: expected an indented block」,怎麼解決呢?

答:Python代碼對縮進的要求非常嚴格,相同層次的代碼必須具有同樣的縮進量。

15.問:運行代碼時提示「AttributeError: 'list' object has no attribute 'add'」,為什麼呢?

答:列表對象沒有add()方法,集合才有add(),仔細檢查對象的類型。

16.問:我想刪除元組當中的一個元素,提示「TypeError: 'tuple' object doesn't support item deletion」,是什麼意思呢?

答:在Python中,元組和字符串這樣的容器類對象是不可變的,不支持其中元素的增加、修改和刪除操作。

17.問:我想使用下標訪問集合中的第一個元素,運行代碼時提示「TypeError: 'set' object does not support indexing」,是因為集合不支持下標嗎?

答:是的。Python集合裡面的元素是無序的,不能使用下標訪問特定位置的元素。

18.問:我想使用切片操作修改列表中的部分元素,運行代碼時提示「ValueError: attempt to assign sequence of size 1 to extended slice of size 3」,該怎麼辦呢?

答:使用切片操作修改列表中部分元素時,如果第三個數字step的值不等於1,那麼等號左側的切片長度和等號右側的列表長度必須一致。

19.問:已知x是一個字符,我想使用x+1得到下一個字符,為什麼提示「TypeError: can only concatenate str (not "int") to str」呢?

答:Python不支持字符和整數相加,如果想得到下一個字符,可以使用表達式chr(ord(x)+1)。

20.問:運行代碼時提示「NameError: name 'value' is not defined」,怎麼辦呢?

答:根據提示信息來看,是說變量value沒定義。很可能是拼寫錯誤,仔細檢查變量是否拼寫正確。

21.問:我的代碼可以運行,但是結果不對,怎麼辦呢?

答:代碼可以運行表示沒有語法錯誤,不代表沒有邏輯錯誤。遇到這種情況時,仔細檢查代碼的邏輯和問題的要求是否一致,是否把>寫成>=了,或者忽略了range()函數返回的是左閉右開區間了,是不是把運算符**寫成*了,是不是代碼縮進有錯誤。

22.問:明明記事本程序文件是存在的,為什麼會提示「FileNotFoundError: [WinError 2] 系統找不到指定的文件。: 'C:\\Windows\notepad.exe'」呢?

答:在這個路徑中,第二個反斜線和後面的字母n恰好組成轉義字符\n,應該使用兩個反斜線或者使用原始字符串。

23.問:訪問文件時,提示「PermissionError: [WinError 5] 拒絕訪問。: 'test.txt'」,怎麼辦呢?

答:應該是文件具有「只讀」之類的特殊屬性,或者當前登錄的用戶帳號沒有權限訪問該文件。

24.問:我機器上明明是有test.txt這個文件的,為什麼使用內置函數open()打開時提示文件不存在呢?

答:如果文件test.txt不在當前文件夾中,在打開或讀寫時必須指定完整路徑。

25.問:從「資源管理器」來看,我當前文件夾中明明有test.txt文件,但是使用內置函數open()打開時還是提示文件不存在,可能是哪裡錯了呢?

答:默認情況下,「資源管理器」會隱藏一些常見類型文件的擴展名,去掉這個隱藏,檢查一下文件的名字是不是test.txt.txt。

26.問:運行代碼讀取文本文件內容時,提示「UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start byte」,是什麼錯誤呢?

答:如果文件中包含中文字符,應使用正確的編碼格式打開,也就是明確使用內置函數open()的encoding參數指定編碼格式。如果不知道文件採用什麼編碼格式,可以使用記事本打開之後使用「另存為」功能保存成特定的編碼格式。

27.問:我已經使用「pip install docx」命令安裝了擴展庫docx,為什麼無法運行書上的代碼操作Word文件呢?

答:操作Word文件的擴展庫名字叫python-docx,不是docx。另外要注意,擴展庫python-docx只能操作Word 2007或更新版本的文檔,不能處理Word 2003之前的文檔。

28.問:使用open()函數打開文件往裡寫入內容時,提示「TypeError: write() argument must be str, not bytes」,是什麼原因呢?

答:如果要寫入文本文件的話,可以使用'w'模式;如果寫入二進位文件的話,應該使用'wb'模式。

29.問:使用內置函數open()打開文件之後,只能按照順序從前往後讀取內容嗎?

答:也不是,如果需要讀取前面已經讀取過的內容,可以使用文件對象的seek()方法修改文件指針的位置。

30.問:我用字符串方法startwith()測試一個字符串是否以另一個字符串為前綴,怎麼會提示「AttributeError: 'str' object has no attribute 'startwith'」這樣的錯誤呢?

答:字符串沒有startwith()方法,應該是startswith()。同理,也沒有endwith()方法,而是endswith()。

31.問:表達式{1, 2, 3}<{1, 2, 4}的值怎麼會是False呢?

答:關係運算符作用於集合時,表示集合之間的包含關係。對於集合A和B,只有A是B的真子集時,A<B的值才是True。

32.問:兩個列表是怎麼比較大小的呢?

答:列表比較大小時,是從前往後依次比較其中的每個元素,直到得到明確的結論為止。以[1, 2, 3]和[1, 2, 4]為例,第一個元素相等,第二個元素也相等,第三個元素3<4,所以[1, 2, 3]<[1, 2, 4]。以[1, 2, 3, 4]和[1, 2, 3]為例,兩個列表中前三個元素是相等的,但第一個列表中還有多餘的元素,所以[1, 2, 3, 4]>[1, 2, 3]。以[4, 2, 1]和[3, 5, 1]為例,第一個元素4>3,此時可以直接得出結論[4, 2, 1]>[3, 5, 1],後面的元素不再比較。元組和字符串也使用同樣的方式比較大小。

33.問:程序中有個map對象,第一次使用是正常的,但是再使用時好像裡面就沒有元素了,這是怎麼回事呢?

答:map對象、enumerate對象、zip對象、filter對象、reversed對象和生成器對象這些具有惰性求值特點的對象,其中的元素只能使用一次,訪問過的元素無法再次訪問。

34.在IDLE中運行程序,提示錯誤「UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 96-96: Non-BMP character not supported in Tk」,但是代碼怎麼檢查都是對的,怎麼辦呢?

答:IDLE中有些字符無法正常輸出,換個開發環境,或者在命令提示符環境中運行程序就可以了。



溫馨提示

進入公眾號,通過菜單「最新資源」==>「歷史文章」可以快速查看分專題的文章列表,通過「最新資源」==>「微課專區」可以觀看Python微課,通過「最新資源」==>「培訓動態」可以查看近期Python培訓安排,通過「最新資源」==>「教學資源」可以查看Python教學資源。



---董付國老師Python系列圖書---

1)《Python程序設計(第2版)》清華大學出版社

2)《Python可以這樣學》清華大學出版社

3)《Python程序設計基礎(第2版)》清華大學出版社

4)《中學生可以這樣學Python》清華大學出版社,配套微課:《中學生可以這樣學Python》84節微課免費觀看地址

5)《Python程序設計開發寶典》清華大學出版社

6)《玩轉Python輕鬆過二級》清華大學出版社

7)《Python程序設計基礎與應用》機械工業出版社

8)《Python程序設計實驗指導書》清華大學出版社(預計2019年1月出版)

9)《Python編程基礎與案例集錦(中學版)》電子工業出版社(預計2019年2月出版)


《中學生可以這樣學Python》84節微課免費觀看地址

非計算機專業《Python程序設計基礎》教學參考大綱

計算機相關專業「Python程序設計」教學大綱(參考)

《Python程序設計》實驗指導書(30個實驗)

《Python程序設計基礎與應用》課後習題答案

Python課程期末考試編程題自動批卷原理與實現模板

「Python小屋」免費資源匯總(截至2018年11月28日)


系列教學PPT:

1900頁Python系列PPT分享一:基礎知識(106頁)

1900頁Python系列PPT分享二:Python序列(列表、元組、字典、集合)(154頁)

1900頁Python系列PPT分享三:選擇與循環結構語法及案例(96頁)

1900頁Python系列PPT分享四:字符串與正則表達式(109頁)

1900頁Python系列PPT分享五:函數設計與應用(134頁)

1900頁Python系列PPT分享六:面向對象程序設計(86頁)

1900頁Python系列PPT分享七:文件操作(132頁)

1900頁Python系列PPT分享八:異常處理結構與程序調試、測試(70頁)

報告PPT(163頁):基於Python語言的課程群建設探討與實踐

報告PPT(123頁):Python編程基礎精要

2000頁Python系列PPT分享九:(GUI編程)(122頁)

Python實驗項目1例:使用進程池統計指定範圍內素數的個數

(PPT)Python程序設計課程教學內容組織與教學方法實踐


相關焦點

  • Python為什麼這麼火?小孩子適合學習python編程嗎?
    Python出現的時間也就短短幾年,但就是在這短短幾年內,它打破了長久以來程式語言被三巨頭(C/JAVA/C++)統治的局面,蟬聯各大編程熱門語言排行榜榜首,成為當下最熱門的明星級程式語言之一。IEEE Spectrum 2017程式語言排行榜為何Python能迅速火起來?今天咱們就來好好聊聊最直接的幾個原因。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    總目錄 零基礎全能篇(4套課程) 實用編程技巧進價(1套課程) 數據分析與挖掘(8套課程) 辦公自動化(3套課程) 機器學習與人工智慧(7套課程) 開發實戰篇(4套課程) 量化投資(2套課程) 網絡爬蟲(6套課程) 資料庫操作(1套課程) python
  • Python成程式語言首選,人工智慧是其最大推力
    2018年,python程式語言榮獲「年度程式語言」稱號!在2018年獲得了最多的排行積分,贏得了3.62%佔比,其次是VisualBasic .NET和Java。Python如今確實已經成為大型程式語言的一部分。
  • 慢步學習,python語言編程,來扯扯語言的學習理解
    黃色字體為python的關鍵字(又稱保留字),from 與import連用,指從……引入……,這是引用的一個方式。對於引用筆者也有文章寫過相關內容。藍色字體print也是關鍵字,作用是輸出文本內容。= 也算是編程的一個詞彙,賦值號,把右側內容賦值給左側。
  • python sys模塊的常見用法匯總
    python的內置模塊sys,提供了系統相關的一些變量和函數,在實際開發中,常見的有以下幾種用法1.版本有限制的代碼,可以通過以上方法來判斷python版本是否符合要求。, '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5
  • 「技術文章」《Python 資料庫 GUI CGI編程》
    2.1 Linux下安裝MySQLdb模塊 使用包安裝可以 wget http://sourceforge.net/projects/mysql-python/files/latest/download$ tar xfz MySQL-python-1.2.3.tar.gz$ cd MySQL-python-1.2.3$whereis mysql_config
  • 人生苦短,我用Python,那麼問題來了,普通人要學python嗎?
    4、現在國外國內很多家長已經給孩子報名學習Python編程課程了。在美國,就連嬰幼兒也有專門的編程童書。話說在金融和IT行當混跡了多年,python一直是被我隨手拿來當個小工具用用,有時候偷懶用python弄個excel自動化整理工具,有時候拿來上各種網站爬蟲搜集點信息,有時候也會拿來寫點量化小工具。那麼到底什麼是python?
  • |python|電氣和電子工程師協會|編程...
    說實話,這是我第一次被程式語言深深迷住,透過它,我們能看到事物更本質和客觀的樣子。當然,除了熱文關鍵詞,我們還能用Python獲得很多問題的答案:比如,金融行業人員面對龐大的數據和複雜的流程時,輸入幾行代碼就可以一次性處理上百個表格,自動抓取關鍵數據。
  • Python入門小迷宮,走完這個迷宮,就能掌握python編程基礎
    這是一個很神奇的迷宮,走完這個迷宮就能掌握python基礎。其實,這是一個用python做的迷宮小遊戲,非常簡單,但對於python初學者來說,還是有一定的挑戰性,但TONOW有源碼和教程,只要跟著python迷宮小遊戲的教程和相應的源碼,不僅很容易就能自己開發出這個遊戲,還能在這個過程中,掌握python編程的基礎哦!
  • python基礎教程之python是什麼?
    Python是著名的「龜叔」Guido van Rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個程式語言。本文引用地址:http://www.eepw.com.cn/article/265927.htm現在,全世界差不多有600多種程式語言,但流行的程式語言也就那麼20來種。如果你聽說過TIOBE排行榜,你就能知道程式語言的大致流行程度。
  • 零基礎學python,自學難度大麼?
    python自學難度,這個要看你是否有基礎,如果有,那就很簡單;零基礎自學相對要花更多的時間,難度說高不高,重在堅持。2、選擇好自學的方式,視頻結合課本,還是純視頻;3、選擇好方向和方式去找資料,定好每天自學多少時間;做好以上三步後,就是堅持學下去,基礎是最難打的,實際就是自己的方向沒有確定好,最開始是選擇自動化運維的方向,後來又轉向去學人工智慧,這個人工智慧的課程就包含了WEB開發的前後端,爬蟲,資料庫,算法,網絡編程
  • 開課吧:學習編程,該學什麼語言?Python如何?
    編程編程如果是興趣方面的可以選擇比較簡單的入門語言入手,然後再慢慢切入到新的程式語言,目前相對來說比較好入門的程式語言是python,這門語言的集成度非常高,適合零基礎的入門學習,集成度高的語言在短時間能看到很不錯的效果,能在短時間內讓自己有成就感,但真要深入的學習還得腳踏實地的學習內在的東西。
  • Python入門基礎之socket多線程編程,TCP伺服器和客戶端通信
    在上一篇文章中,我介紹了一下python3 socket編程的基礎,包括TCP、UDP客戶端和伺服器的建立過程(連結在最下方)。不過那個只是單線程的,伺服器一次只能和一個客戶端會話,多個客戶端的話只能等待。
  • python編程30個常用技巧
    打開APP python編程30個常用技巧 深度學習這件小事 發表於 2020-12-24 15:07:51 1、冒泡排序
  • biopython簡介
    biopython和bioperl, biojava項目類似,都是Open Bioinformatics Foundation組織的項目之一,旨在提供一個編程接口,方便生物信息數據的處理。
  • 寫Python 代碼不可不知的函數式編程技術
    選自 Medium作者:Raivat Shah參與:魔王、Jamin本文對 Python 中的函數式編程技術進行了簡單的入門介紹。近來,越來越多人使用函數式編程(functional programming)。因此,很多傳統的命令式語言(如 Java 和 Python)開始支持函數式編程技術。
  • 《小灰教你零基礎學python》-Python入門語言
    二、什麼是程式語言程序(軟體)是使用程式語言編寫的,比如咱們日常使用的微信、qq、瀏覽器、播放器都是使用程式語言編寫的,程式語言有哪些:javapython>c語言php(有人稱php是最好的程式語言)這裡包括咱本套課程需要學習的python,其實理解咱這麼理解就行:咱們和外國人交流需要說英語,那麼咱們必須要學會英語才能和對方溝通;咱們需要讓電腦進行「溝通」就必須要使用程式語言。
  • python是什麼:Python相關內容了解
    今天來聊聊一篇關於python是什麼:Python相關內容了解的文章,現在就為大家來簡單介紹下python是什麼:Python相關內容了解,希望對各位小夥伴們有所幫助。Python是著名的「龜叔」Guido van Rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個程式語言。現在,全世界差不多有600多種程式語言,但流行的程式語言也就那麼20來種。如果你聽說過TIOBE排行榜,你就能知道程式語言的大致流行程度。
  • Python程式設計師最常犯的10個錯誤,你中招了嗎?
    本文供Python高級開發人員參考,Python小白可以參考下面這篇文章:http://www.onlamp.com/pub/a/python/2004/02/05/learn_python.html常見錯誤1:濫用表達式作為函數參數的默認值Python允許開發者指定函數參數的默認值
  • 直接乙醇燃料電池(DEFC)常見問題及解答
    直接乙醇燃料電池(DEFC)常見問題及解答   無錫冠亞恆溫製冷技術有限公司致力於致力於製冷加熱控溫系統、超低溫冷凍機、新能源汽車部件測試系統、VOCs冷凝回收裝置、加熱循環系統等生產銷售,直接乙醇燃料電池(DEFC),廠家直銷,價格優惠,歡迎來電採購!