[轉載] Python3十大經典錯誤及解決辦法

參考鏈接: Python中的關鍵字2

◆ ◆ ◆? ◆ ◆

?

? 接觸了很多Python愛好者,有初學者,亦有轉行人。不論大家學習Python的目的是什么,總之,學習Python前期寫出來的代碼不報錯就是極好的。下面,嚴小樣兒為大家羅列出Python3十大經典錯誤及解決辦法,供大家學習。

?

?一、 SyntaxError 語法錯誤

?(1)引號沒有成對出現

?報錯信息:

?1SyntaxError:EOL while scanning string literal

?

?

?錯誤示例:

?1string = 'hello world

?

?

?解決方法:字符串切記要放在引號中,單引號雙引號無所謂。當一個字符串中包含單引號或雙引號時,很容易出現引號不配對的情況。

?(2)圓括號沒有成對出現

?報錯信息:

?1SyntaxError:unexpected EOF while parsing

?

?

?錯誤示例1:

?1result = (1024+(512*2)/128

?

?

?錯誤示例2:

?1print('hello world'

?

?

?解決方法:使圓括號成對出現。在書寫復雜的表達式或調用函數時會經常遇到這個問題。

?(3)錯誤使用自操作運算符++或--等

?報錯信息:

?1SyntaxError:invalid syntax

?

?

?錯誤示例:

?1v = 64

2v++

?

?

?解決方法:在Python語言中,沒有類似C語言的++或--等自操作運算符。與之類似功能的用法是+=或-=運算符。例如,使用下面的代碼進行讓變量v進行自增1的操作。

?1v += 1

?

?

?(4)試圖使用等號(=)判斷兩個運算量是否相等

?報錯信息:

?1SyntaxError:invalid syntax

?

?

?錯誤示例:

?1if v=64:

2? ? print('hello world')

?

?

?解決方法:在Python語言中使用兩個等號(==)作為判斷兩個運算量是否相等的關系運算符,而等號(=)是賦值運算符。

?(6)錯誤使用Python語言關鍵字作為變量名

?報錯信息:

?1SyntaxError: can`t assign to keyword

?

?

?錯誤示例:

?1False= 1

?

?

?解決方法:不要使用Python語言關鍵字作為變量名、函數名或類名等。在Python Shell窗口中,使用help('keywords')指令可以查看Python語言的關鍵字列表。

?(7)忘記在if/elif/else/while/for/def/class等語句末尾添加冒號(:)

?報錯信息:

?1SyntaxError:invalid syntax

?

?

?錯誤示例1:

?1a = '12345'

2for i? in a

3? ? print(i)

?

?錯誤示例2:

?1def sayhi()

2? ? print('Hi')

?

?

?解決方法:在if/elif/else/while/for/def/class等語句末尾添加冒號(:)即可。牢記語法規則,多多練習多多敲代碼。

?(8)錯誤地使用了中文標點符號

?報錯信息:

?1SyntaxError: invalid character in identifier

?

?

?錯誤示例1:

?1print('hello','world')

2# 錯誤原因:逗號是中文標點符號

?

?

?錯誤示例2:

?1for i in range(10):

2# 錯誤原因:冒號是中文標點符號

?

?

?解決方法:除了字符串中可以有中文外,其它任何情況均使用英文狀態進行編輯。

?二、 IndentationError 縮進錯誤

?報錯信息:

?1IndentationError:unindent does not match any outer indentation level

2IndentationError:expected an indented block

?

?

?錯誤示例:

?1a = 2

2while a < 0:

3? ? ? print('hello')

4? ? a -= 1

5else:

6? ? print('0.0')

?

?解決方法:上述代碼中while語句體內的代碼縮進沒有對齊。正確使用縮進排版代碼。當代碼是從其它地方復制并粘貼過來的時候,這個錯誤較多見。

?三、 NameError 名字錯誤

?當變量名、函數名或類名等書寫錯誤,或者函數在定義之前就被調用等情況下,就會導致名字錯誤。

?報錯信息:

?1NameError: name 'pirnt' is not defined

2NameError: name 'sayhi' is not defined

3NameError: name 'pd' is not defined

?

?

?錯誤示例1:

?1pirnt('hello world')

2# 錯誤原因:print拼寫錯誤。

?

?

?錯誤示例2:

?1sayhi()

2

3def sayhi():

4? ? pass

5# 錯誤原因:在函數定義之前對函數進行調用。

?

?

?錯誤示例3:

?1pd.read_excel(r'file.xlsx')

2# 錯誤原因:在調用pandas方法前并未導入pandas庫或者并未起別名為pd。

?

?

?解決方法:正確書寫變量名、函數名或類名等,在使用變量前先進行賦值,將函數的定義放在函數調用之前,在使用第三方庫前先進行導入、調包等等。即保證某個名字(標識符)先存在,才能被使用。

?四、 TypeError 類型錯誤

?(1)整數和字符串不能進行連接操作

?報錯信息:

?1TypeError: Can`t convert 'int' object to str implicitly

2TypeError: unsupported operand type(s) for + : 'float' and 'str'

?

?

?錯誤示例1:

?1print('score:'+100)

?

?

?錯誤示例2:

?1print(9.8 + 'seconds')

?

?

?解決方法:在整數、浮點數或布爾值與字符串進行連接操作之前,先使用str()函數將其轉換為字符串類型。

?(2)調用函數時參數的個數不正確,或者未傳遞參數

?報錯信息:

?1TypeError: input expected at most 1 arguments,got 2

2TypeError: say() missing 1 required positional argument:'words'

?

?

?錯誤示例1:

?1input('輸入姓名','年齡')

2# 錯誤原因:試圖給input()函數提供第2個參數。

?

?

?錯誤示例2:

?1def say(words):

2? ? print(words)

3

4say()

5# 錯誤原因:調用函數時未傳遞參數。

?

?

?解決方法:記住函數用法,了解函數的參數定義,使用正確的方法調用函數即可。

?五、 KeyError 鍵錯誤

?使用不存在的鍵名訪問字典中的元素,就會發生這個錯誤。

?報錯信息:

?1KeyError: 'c'

?

?

?錯誤示例:

?1d = {'a':1,'b':2}

2print(d['c'])

?

?

?解決方法:在訪問字典中的元素時,先用in關鍵字檢測要訪問的鍵名是否存在,或者是使用字典和get()方法安全地訪問字典元素。

?六、 IndexError 索引錯誤

?當訪問列表的索引超出列表范圍時,就會出現索引錯誤。

?報錯信息:

?1IndexError: list index out of range

?

?

?錯誤示例:

?1a = [1,2,3]

2print(a[3])

3# 錯誤原因:列表a中不存在第4個索引。列表的索引從0開始編號。

?

?

?解決方法:通過len()函數獲取列表的長度,然后判斷要訪問的索引是否超出列表范圍。

?七、 UNboundLocalError 未初始化本地變量錯誤

?在函數中,如果對未聲明的全局變量進行修改操作,將會遇到這個錯誤。

?報錯信息:

?1UnboundLocalError: local variable 's' referenced before assignment

?

?

?錯誤示例:

?1s = 1

2

3def test():

4? ? s += 1

5? ? print(s)

6

7test()

8# 錯誤原因:在函數內對未聲明的全局變量s進行了自增操作。

9# Python將變量s視為一個本地的局部變量,但該變量未初始化。

?

?

?解決方法:在函數內使用全局變量時,使用global關鍵字對其進行聲明即可。

?八、 AttributeError 屬性錯誤

?報錯信息:

?1AttributeError: 'tuple' object has no attribute 'append'

2AttributeError: 'DataFrame' object has no attribute 'col'

?

?

?錯誤示例1:

?1t = (1,2,3)

2t.append(4)

3# 錯誤原因:元祖不可變。

?

?

?錯誤示例2:

?1df = pd.read_excel(r'data.xlsx')

2df.col

3# 錯誤原因:DataFrame沒有col屬性,應該為columns。

?

?

?解決方法:正確書寫類的屬性名,不要發生書寫錯誤。深刻理解元祖,列表的區別,可將元祖轉換為列表添加元素。

?九、 ModuleNotFoundError 模塊不存在

?報錯信息:

?1ModuleNotFoundError: No module named 'pandas'

?

?

?錯誤示例1:

?1import pandas as pd

2# 沒有導入成功,報上面錯誤。

?

?

?解決方法:這種報錯常見于兩種場景中,第一、未下載、安裝該模塊;第二、將調用的模塊路徑與被調用的模塊路徑不一致等。第一種情況直接下載安裝即可,在cmd中,pip install xxx;第二種情況電腦中可能存在多個版本的Python,建議保留一個常用的即可。

?十、 FileNotFoundError 文件不存在

?報錯信息:

?1FileNotFoundError: File b'E:\test\test_data.csv' does not exist

?

?

?錯誤示例:

?1pd.read_csv('E:\test\test_data.csv')

2# 錯誤原因:路徑中包含'\t',系統錯誤地認為是制表符。

?

?

?解決方法:在確保該路徑下確實存在所寫文件后,在讀取文件路徑前面加'r',表示只讀,作為文件路徑讀取;或者使用雙斜杠'\ \'來進行轉義,形如:'E:\ \test\ \test_data.csv'。偶爾也會發生文件名、路徑的確寫錯,犯一些低級錯誤。

?結束語

?報錯,并不可怕,那是一個學習的機會。現在搜索引擎這么發達,只要把錯誤信息放進去,一搜就出來了各種解決之道。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540277.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540277.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540277.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

兩臺電腦間大量數據拷貝的快捷方法

可能大家會遇到需要將一臺電腦里的數據拷貝到另外一臺電腦&#xff0c;最常用的方法是用u盤或移動硬盤等存儲設備來拷貝&#xff0c;這樣速度慢&#xff0c;而且可能拷貝多次才能將數據拷貝完。現提供一種方法&#xff0c;就是通過windows 的文件共享來實現。通過千兆網線直接連…

[轉載] 使用 Web 標準生成 ASP.NET 2.0 Web 站點

參考鏈接&#xff1a; 使用super訪問Java祖父母的成員 Stephen WaltherSuperExpert.com 適用于&#xff1a; Microsoft ASP.NET 2.0 (Beta 2) Microsoft Visual Studio .NET 2005 Microsoft Visual Web Developer 摘要&#xff1a; Microsoft ASP.NET 2.0 具有很多有用的功能…

Office快捷鍵大全之三(Access快捷鍵下篇)

向下鍵 向某幫助主題的末尾滾動 Page Up 以較大增量向某幫助主題的開頭滾動 Page Down 以較大增量向某幫助主題的末尾滾動 Home 移到某幫助主題的開頭 End 移到某幫助主題的末尾 CtrlP 打印當前幫助主題 CtrlA 選定整個幫助主題 CtrlC 將選定項復制到"剪貼…

[轉載] 如何在Android設備之間共享Google Play應用,音樂等

參考鏈接&#xff1a; 使用super訪問Java祖父母的成員 We recently showed you how to configure your iOS devices for app and media sharing; more than a few people wrote in asking how to do the same thing with Google Play purchases. Read on as we dig into how t…

linux 高性能讀書筆記之通用socket地址

####socket網絡編程接口 socket的地址是結構體sockaddr 代碼如下 struct sockaddr{ sa_family_t sa_family; char sa_data[14]; } sa_family 成員是地址族類型&#xff08;sa_family_t)變量。地址族類型通常與協議族類型對應 1.二者對應表 協議族地址表描述PF_UNIXAF_UNIXUNIX本…

[轉載] JAVA面向對象之代碼塊 繼承 方法的重寫 super關鍵字與重寫toString()方法介紹

參考鏈接&#xff1a; 可以重寫Java中的私有方法嗎 JAVA面向對象之代碼塊與繼承 代碼塊分類 局部代碼塊 作用:限制變量生命周期 書寫位置:在方法中 構造代碼塊 開發中很少使用 書寫位置:類中 方法外 調用時機:如果你有構造代碼塊 系統會幫你調用 幫你在創建對象…

struts2中s:select標簽的使用

轉自&#xff1a;https://www.cnblogs.com/Sara-shi/archive/2013/03/13/struts2_select.html 1 靜態生成 <s:select name"user.sex" list"#{0:男,1:女}" label"性別" headerKey"" headerValue"請選擇性別"></s:se…

[轉載] JAVA面試題大全(part_1)

參考鏈接&#xff1a; 對Java中派生類方法更嚴格的訪問 JAVA面試題大全(part_1) 1、面向對象的特征有哪些方面 (1)抽象&#xff1a; 抽象就是忽略一個主題中與當前目標無關的那些方面&#xff0c;以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題&#xf…

使用mysqladmin命令修改MySQL密碼與忘記密碼

修改密碼&#xff1a; 1.例如你的 root用戶現在沒有密碼&#xff0c;你希望的密碼修改為123456&#xff0c;那么命令是&#xff1a; mysqladmin -u root password 123456 2.如果你的root現在有密碼了&#xff08;123456&#xff09;&#xff0c;那么修改密碼為abcdef的命令是&a…

[轉載] java面試100問+參考答案

參考鏈接&#xff1a; 對Java中派生類方法更嚴格的訪問 1、面向對象的特征有哪些方面 (1).抽象&#xff1a; 抽象就是忽略一個主題中與當前目標無關的那些方面&#xff0c;以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題&#xff0c;而只是選擇其中的…

工作所用的模塊回滾腳本

俗話說的好&#xff1a;“真男人從來不回滾”&#xff0c;但是家中常備一個回滾腳本也是很有必要的&#xff0c;我所在公司的服務器模塊名都是在初始化的時候寫進/etc/role_install這個文件里&#xff0c;如下圖的這個服務器就是fss服務器&#xff1a; 再比如下面這個服務器&am…

Linux服務器性能評估與優化

一、影響Linux服務器性能的因素 1. 操作系統級 CPU 內存 磁盤I/O帶寬 網絡I/O帶寬 2. 程序應用級 二、系統性能評估標準影響性能因素評判標準好壞糟糕CPUuser% sys%< 70%user% sys% 85%user% sys% >90%內存Swap In&#xff08;si&…

[轉載] Java序列化的幾種方式以及序列化的作用

參考鏈接&#xff1a; Java中帶有繼承的對象序列化 文章轉載自&#xff1a; 本文著重講解一下Java序列化的相關內容。 如果對Java序列化感興趣的同學可以研究一下。 一.Java序列化的作用 有的時候我們想要把一個Java對象變成字節流的形式傳出去&#xff0c;有的時候我們…

nginx 非80、443端口跳轉到80、443

其實很簡單: 123if ($server_port ! 80 ) { rewrite ^/(.*)$ http://$host/$1 permanent; }舉一反三。。。 123if ($server_port ! 443 ) { rewrite ^/(.*)$ https://$host/$1 permanent; }123if ($host ! host ) { rewrite ^/(.*)$ http://host/$1 permanent; }本文轉自 ninny…

[轉載] 一文徹底搞懂父類引用指向子類對象問題

參考鏈接&#xff1a; 用子類引用子類對象 vs 父類引用 public class Father { private String name; private int age; private int weight; public void eat() { System.out.println("Father is eating"); } private void run() { System.out.println("Runin…

把控站外seo效果的幾個操作點

把控站外seo效果的幾個操作點 實際上&#xff0c;站外的seo不僅僅是外鏈這么簡單&#xff0c;還包括用戶行為&#xff08;點擊&#xff09;&#xff0c;品牌詞曝光等工作。大部分情況下&#xff0c;我們所說的站外優化就是發外鏈。本文就外鏈相關事宜&#xff0c;講解些許操作點…

[轉載] 【C語言】fopen C4996錯誤解決

參考鏈接&#xff1a; C和C#重載可以與繼承一起使用嗎 C4996 fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 解決方案&#xff1a;添加宏定…

Quartus II 8.1 詳解--有圖---圖片詳解 【1講】

Quartus II 8.1 詳解--有圖---圖片詳解 看圖片比較清楚&#xff0c;比文章清楚的多 本文轉自 zhangguangyi 51CTO博客&#xff0c;原文鏈接http://blog.51cto.com/bosszhang/808019:

[轉載] JAVA數組實現學生成績統計

參考鏈接&#xff1a; Java程序的輸出 20(繼承) 一、項目名稱 數組實現學生成績統計 二、項目描述 1.項目簡介&#xff1a; 由用戶輸入學生人數與名字&#xff0c;并定義當前學期課程數與課程名&#xff0c;并分別錄入每位學生每門課程成績&#xff0c;系統顯示輸入每位學生每…

建立同步文件的腳本

為避免一個一個的去修改每一個服務器的配置文件&#xff0c;只需要rsync同步一下就可以搞定#!/bin/bash#rsync.shLOCAL_DIR"/opt/admin"test -n "$hosts" || hosts"xxxx xxxx"REMOTE_DIR"/opt/"RSYNC_LOG"/opt/var/log/rsync.log…