17個新手常見Python運行時錯誤

當初學 Python 時,想要弄懂 Python 的錯誤信息的含義可能有點復雜。這里列出了常見的的一些讓你程序 crash 的運行時錯誤。

1)忘記在 if , elif , else , for , while , class ,def 聲明末尾添加 :(導致 “SyntaxError :invalid syntax”)

該錯誤將發生在類似如下代碼中:

if spam == 42
print('Hello!')


2)使用 = 而不是 ==(導致“SyntaxError: invalid syntax”)

= 是賦值操作符而 == 是等于比較操作。該錯誤發生在如下代碼中:

if spam = 42:
print('Hello!')


3)錯誤的使用縮進量。(導致“IndentationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”以及“IndentationError:expected an indented block”)

記住縮進增加只用在以:結束的語句之后,而之后必須恢復到之前的縮進格式。該錯誤發生在如下代碼中:

print('Hello!')
print('Howdy!')

或者:
if spam == 42:
print('Hello!')
print('Howdy!')

或者:
if spam == 42:
print('Hello!')


4)在 for 循環語句中忘記調用 len() (導致“TypeError: 'list' object cannot be interpreted as an integer”)

通常你想要通過索引來迭代一個list或者string的元素,這需要調用 range() 函數。要記得返回len 值而不是返回這個列表。

該錯誤發生在如下代碼中:

spam = ['cat', 'dog', 'mouse']
for i in range(spam):
print(spam[i])


5)嘗試修改string的值(導致“TypeError: 'str' object does not support item assignment”)

string是一種不可變的數據類型,該錯誤發生在如下代碼中:

spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)


而你實際想要這樣做:

spam = 'I have a pet cat.'
spam = spam[:13] + 'r' + spam[14:]
print(spam)


6)嘗試連接非字符串值與字符串(導致 “TypeError: Can't convert 'int' object to str implicitly”)

該錯誤發生在如下代碼中:

numEggs = 12
print('I have ' + numEggs + ' eggs.')


而你實際想要這樣做:

numEggs = 12
print('I have ' + str(numEggs) + ' eggs.')

或者:
numEggs = 12
print('I have %s eggs.' % (numEggs))


7)在字符串首尾忘記加引號(導致“SyntaxError: EOL while scanning string literal”)

該錯誤發生在如下代碼中:

print(Hello!')

或者:
print('Hello!)

或者:
myName = 'Al'
print('My name is ' + myName + . How are you?')


8)變量或者函數名拼寫錯誤(導致“NameError: name 'fooba' is not defined”)

該錯誤發生在如下代碼中:

foobar = 'Al'
print('My name is ' + fooba)

或者:
spam = ruond(4.2)

或者:
spam = Round(4.2)


9)方法名拼寫錯誤(導致 “AttributeError: 'str' object has no attribute 'lowerr'”)

該錯誤發生在如下代碼中:

spam = 'THIS IS IN LOWERCASE.'
spam = spam.lowerr()


10)引用超過list最大索引(導致“IndexError: list index out of range”)

該錯誤發生在如下代碼中:

spam = ['cat', 'dog', 'mouse']
print(spam[6])


11)使用不存在的字典鍵值(導致“KeyError:‘spam’”)

該錯誤發生在如下代碼中:

spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])


12)嘗試使用Python關鍵字作為變量名(導致“SyntaxError:invalid syntax”)

Python關鍵不能用作變量名,該錯誤發生在如下代碼中:

class = 'algebra'


Python3的關鍵字有:and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield

?

13)在一個定義新變量中使用增值操作符(導致“NameError: name 'foobar' is not defined”)

不要在聲明變量時使用0或者空字符串作為初始值,這樣使用自增操作符的一句spam += 1等于spam = spam + 1,這意味著spam需要指定一個有效的初始值。

該錯誤發生在如下代碼中:

spam = 0
spam += 42
eggs += 42


14)在定義局部變量前在函數中使用局部變量(此時有與局部變量同名的全局變量存在)(導致“UnboundLocalError: local variable 'foobar' referenced before assignment”)

在函數中使用局部變來那個而同時又存在同名全局變量時是很復雜的,使用規則是:如果在函數中定義了任何東西,如果它只是在函數中使用那它就是局部的,反之就是全局變量。

這意味著你不能在定義它之前把它當全局變量在函數中使用。

該錯誤發生在如下代碼中:

someVar = 42
def myFunction():
print(someVar)
someVar = 100
myFunction()


15)嘗試使用 range()創建整數列表(導致“TypeError: 'range' object does not support item assignment”)

有時你想要得到一個有序的整數列表,所以 range() 看上去是生成此列表的不錯方式。然而,你需要記住 range() 返回的是 “range object”,而不是實際的 list 值。

該錯誤發生在如下代碼中:

spam = range(10)
spam[4] = -1


也許這才是你想做:

spam = list(range(10))
spam[4] = -1


(注意:在 Python 2 中 spam = range(10) 是能行的,因為在 Python 2 中 range() 返回的是list值,但是在 Python 3 中就會產生以上錯誤)

?

16)不錯在 ++ 或者 -- 自增自減操作符。(導致“SyntaxError: invalid syntax”)

如果你習慣于例如 C++ , Java , PHP 等其他的語言,也許你會想要嘗試使用 ++ 或者 -- 自增自減一個變量。在Python中是沒有這樣的操作符的。

該錯誤發生在如下代碼中:

spam = 1
spam++


也許這才是你想做的:

spam = 1
spam += 1


17)忘記為方法的第一個參數添加self參數(導致“TypeError: myMethod() takes no arguments (1 given)”)

該錯誤發生在如下代碼中:

class Foo():
def myMethod():
print('Hello!')
a = Foo()
a.myMethod()

轉載于:https://www.cnblogs.com/vineleven/p/4777806.html

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

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

相關文章

android activity alias,動態更換桌標 Activity-alias

前言動態更換App圖標,網上可以收搜到很多,這里也是參考前人經驗,讀完本文可以得到,如何動態更換桌標(非網絡獲取桌標圖片),標志位的闡述,更加透徹的理解.用到的知識activity-alias并不是代表一個Activity,而是代表一個已經存在的Activity的別名。它使用在清單文件中…

python替代php,Python架構的PHP替代方案

I am happily using fabric for my Python projects for deployment. Now I am engaged in a larger PHP project and wondering if there is something like fabric for PHP?解決方案Hmm? Why does it matter? Fabric is just python scripting. So its project language a…

MAC終端安裝grunt--javascript世界得構建工具

祝賀我成為前端啦!~~從年前得小測試到今年得前端,成功轉型!我真是一個進步得好青年,好少女! 這兩天出去受虐,面了兩家前端,表現非常不好,還是回到我現在得公司好好沉淀技術&#xff…

android sdk eclipse沒導入,Android—新的eclipse導入SDK出錯解決辦法

原先系統崩潰,重裝系統,加入一塊內存條,從32位變成62位,原先的eclipse用不了;去官網下載64位的eclipse,安裝,用一樣的方法導入SDK。這時候肯定會提示錯誤,如下:1.This An…

兩個分數化簡比怎么化_我學《分數的意義》心得

停課不停學已經有將近兩個月了,我們邁入了“分數”這一部分。聽媽媽說,這一塊內容很重要,可我覺得到目前為止(明天就學真分數、假分數和帶分數了),分數好像并不比四年級難。看了看書,再做點練習,把這點新的…

html在線拖拽環繞,jQuery實現html元素拖拽

代碼很簡單,效果非常棒,直接給大家上源碼:html定投金額 :元10050010002000300040005000600070008000900010000單位:元css.money-input{margin:36px auto 0;width:330px;font-size:14px;color:#818181}.input-rela{width:250px;height:42px;di…

iphone 抹除設備是什么意思_SMT設備有哪些,SMT是什么意思?

SMT設備其實就是表面貼裝技術所需要的機器,一般一條SMT整線常規包含以下設備:上板機、印刷機、接駁臺、SPI、貼片機、插件機、回流焊、波峰焊、AOI、X-ray、下板機等設備,以上設備是一條比較完整的smt配線清單設備,不同工廠可根據…

visual studio 安裝Entity framework失敗

今日通過Nuget安裝Entity Framwork 6.1.3時候在最后一步石一直報錯,提示“安裝失敗,正在回滾”。 回滾也就罷了,居然還卸載不了安裝了一半的EF。 shit 考慮是不是得用管理員模式run Visual Studio 試之,然并卵。 是不是Nuget版本太…

筆記本軟件頁面分辨率低_筆記本最容易忽略的屏幕 有幾個參數一定要知道

對于第一次購買筆記本的朋友來說,往往會忽視一個重要的硬件,那就是屏幕。尺寸有多大?分辨率是多少?色彩好不好?這些都應該是大家應該關心的問題。下面筆者就和大家聊聊筆記本屏幕應該注意的幾個參數。1、尺寸屏幕尺寸示…

html優美界面左側下拉,一組時尚的側邊欄菜單和下拉列表UI設計

這是一款非常時尚的可伸展的側邊欄菜單和select下拉列表以及手風琴式垂直下拉列表UI設計效果。它們通過簡單的CSS樣式設置,以及和jQuery,jqueryUI的配合,制作出非常時尚的web組件UI設計效果。制作方法HTML結構側邊欄的HTML結構使用在中嵌套無…

.NET基礎 (03)生成、部署和管理

生成、部署和管理1 如何生成強簽名的程序集2 如何把程序集放入GAC中3 延遲簽名及其作用4 程序集的版本分哪幾部分 1 如何生成強簽名的程序集在生成程序集時,CLR提供了兩種可選類型:強簽名程序集。弱簽名程序集。 強簽名程序集是一個帶有公鑰和數字簽名的…

.net 識別一維碼_天若OCR文字識別 v5.0 原創好用的OCR及翻譯小工具

一款非常好用的OCR及翻譯小工具,集合百度、騰訊、有道、搜狗,調用了各大網站的ocr接口,免費不限次數(有道免費接口有ip限制僅供娛樂)。1、對于搜狗的接口調用的還是http://ocr.shouji.sogou.com/v2/ocr/json,這個接口識別效果很好…

html中div中加顏色,css怎樣給div加邊框顏色

css怎樣給div加邊框顏色1、css為div四個邊分別添加邊框border-color:#000(設置4邊邊框顏色為黑色)border-color:顏色值,即可設置對象邊框顏色border-left-color:#000 設置左邊框顏色為黑色border-right-color:#000 設置右邊框顏色為黑色border-top-color:#000 設置上…

Microsoft Dynamics CRM 前瑞開發

做CRM開發最大的感受就是其前瑞開發過程中,調試起來比較麻煩,需要做一些斷點還要配制一些瀏覽器設置,對新手來說比較困難。還有就是對REST調試,經常為了調試一個正確的結果而花費大量的時間。現在推薦一個REST 工具來調試CRM的前瑞…

割線法求解過程_求解稀疏優化問題2——臨近點方法+半光滑牛頓法

這篇文章是我之前一篇文章的兄弟篇,沒看過的可以看下面這個。鄧康康:求解稀疏優化問題——半光滑牛頓方法?zhuanlan.zhihu.com我們考慮的問題仍然是如下的一般問題:其中 ,并且 特別大;表示一個凸可微函數,例如 表示一…

html 樹形圖可拖拽,HTML5拖拽API實現vue樹形拖拽組件

因業務場景需要一個可拖拽修改節點位置的樹形組件,因此動手擼了一個,乘此機會摸了一把html5原生拖拽。近期有時間將核心部分代碼抽出,簡單說下實現方式。1.樹形結構-組件遞歸使用樹形結構非常簡單,tree組件作為父組件,…

navicat 或者workbench 無法連接127.0.0.1(61)的解決方法

1、輸入mysql -uroot 進入命令行模式, 2、輸入"show variables like %sock%;"查看sock文件所在位置 如: 3、配置客戶端(以navicat為例) (1)打開mac 下的navicat(2)建立相應的連接&…

jmeter如何定位網絡延時_JMeter用戶定義變量和properties變量高級使用

Jmeter有個配置元素叫做用戶自定義變量(英文名稱是UserDefinedVariables)而我們提到的vars即是Variables的簡寫。 之前我們也說到過Jmeter的腳本中(jsr223sampler或者beanshell編寫的腳本)使用varsput和varsget的操作(varsget和put的操作僅在threadgroup測試組線程中執行&#…

html5與跨平臺開發,HTML5應用與跨平臺應用開發

本課程將總體講解開發HTML5應用和跨平臺應用的方法,共分成三部分。第一部分為HTML5開發基礎,帶你分析并掌握多種移動開發技術和設計方式;第二部分為HTML5高級應用,講解在HTML5中調用其它應用或服務的方法;第三部分為跨…

jQuery中的幾個模塊總結

Query插件,以備并希望在前端方面有所長進。請批評指正。 一,類型判斷全解 JQuery判斷類型擴展方法:$.type() 1 /*type: function( obj ) { 2 if ( obj null ) { 3 return obj ""; 4 } …