您好,登錄后才能下訂單哦!
此篇文章整理新手編寫代碼常見的一些錯誤,有些錯誤是粗心的錯誤,但對于新手而已,會折騰很長時間才搞定,所以在此總結下我遇到的一些問題。希望幫助到剛入門的朋友們。
1.NameError變量名錯誤
報錯:
>>> print a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
解決方案:
先要給a賦值。才能使用它。在實際編寫代碼過程中,報NameError錯誤時,查看該變量是否賦值,或者是否有大小寫不一致錯誤,或者說不小心將變量名寫錯了。
注:在Python中,無需顯示變量聲明語句,變量在第一次被賦值時自動聲明。
>>> a=1 >>> print a 1
2.IndentationError代碼縮進錯誤
點擊返回目錄
代碼:
a=1 b=2 if a<b: print a
報錯:
IndentationError: expected an indented block
原因:
縮進有誤,python的縮進非常嚴格,行首多個空格,少個空格都會報錯。這是新手常犯的一個錯誤,由于不熟悉python編碼規(guī)則。像def,class,if,for,while等代碼塊都需要縮進。
縮進為四個空格寬度,需要說明一點,不同的文本編輯器中制表符(tab鍵)代表的空格寬度不一,如果代碼需要跨平臺或跨編輯器讀寫,建議不要使用制表符。
解決方案:
a=1 b=2 if a<b: print a
3.AttributeError對象屬性錯誤
報錯:
>>> import sys >>> sys.Path Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'module' object has no attribute 'Path'
原因:
sys模塊沒有Path屬性。
解決方案:
python對大小寫敏感,Path和path代表不同的變量。將Path改為path即可。
>>> sys.path ['', '/usr/lib/python2.6/site-packages']
python知識拓展:
使用dir函數(shù)查看某個模塊的屬性
4.TypeError類型錯誤
4.1入?yún)㈩愋湾e誤
代碼:
t=('a','b','c') for i in range(t): print a[i]
報錯:
TypeError: range() integer end argument expected, got tuple.
原因:
range()函數(shù)期望的入?yún)⑹钦停╥nteger),但卻給的入?yún)樵M(tuple)
解決方案:
將入?yún)⒃Mt改為元組個數(shù)整型len(t)
將range(t)改為range(len(t))
4.2入?yún)€數(shù)錯誤
4.2.1關于元組作為入?yún)?/p>
代碼:
# coding=utf-8 ''' Created on 2016-7-21 @author: Jennifer Project:顯式等待 ''' from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from time import ctime driver=webdriver.Firefox() driver.get(r'http://www.baidu.com/') loc=(By.ID,'kw') print ctime() element=WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(*loc)) element.send_keys('selenium') print ctime() driver.quit()
報錯:
Traceback (most recent call last): File "D:\system files\workspace\selenium\autotestcombat\test_4_7_1_webdriverwait.py", line 18, in <module> element=WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(*loc)) TypeError: __init__() takes exactly 2 arguments (3 given)
原因:
類的函數(shù)__init__()需要兩個參數(shù),但實際上給了三個。
EC.visibility_of_element_located類的入?yún)撌莾蓚€入?yún)ⅲ?self和元組。但卻給了三個參數(shù) self和*loc中的兩個元素作為入?yún)ⅰ?br />
解決方案:
這里要將EC.visibility_of_element_located(*loc)改為EC.visibility_of_element_located(loc),入?yún)樵M,而不是元組里邊的兩個值。
python知識拓展:
關于入?yún)?的用法
以元組作為函數(shù)入?yún)?,如果元組前加*號,說明傳遞的入?yún)樵M中的各個元素。如果元組前沒有加*號,說明傳遞的入?yún)樵M本身。
舉例說明:
loc =(By.NAME,'email')
element1=WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(loc)) #只要一個參數(shù)(不考慮self情況下),元組loc,即:(By.NAME,'email')。 直接傳loc。
element2=driver.find_element(*loc)#需要兩個參數(shù),元組loc的元素,即:By.NAME,'email'。直接傳*loc
4.2.2其他
報錯:
>>> import os >>> os.listdir() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: listdir() takes exactly 1 argument (0 given)
原因:
listdir()函數(shù)需要一個入?yún)?,但是只給了0個入?yún)ⅰ?/p>
解決方案:
加一個入?yún)?/p>
>>> os.listdir('/home/autotest') ['hello.py', 'email126pro']
python知識拓展:
如何查看某個函數(shù)的使用,可以使用help查看。
>>> help(os.listdir) Help on built-in function listdir in module posix: listdir(...) listdir(path) -> list_of_strings Return a list containing the names of the entries in the directory. path: path of directory to list
說明:os.listdir()函數(shù)需要一個path路徑入?yún)ⅲ瘮?shù)結果返回值是由字符串組成的列表。
4.3非函數(shù)卻以函數(shù)來調用
報錯:
>>> t=('a','b','c') >>> t() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object is not callable
原因:
t為元組,元組不能被調用,不能加()。初學者編寫代碼時,偶爾粗心會將變量當做方法來調用(不小心加了括號)。所以要認真檢查下是否變量加了括號,或者方法漏加了括號。
解決方案:
將括號去除。
>>> t ('a', 'b', 'c')
5.IOError輸入輸出錯誤
5.1文件不存在報錯
報錯:
>>> f=open("Hello.py") Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: 'Hello.py'
原因:
open()函數(shù)沒有指明mode,默認為只讀方式,如果該目錄下沒有Hello.py的文件,則會報錯,可查看是否拼寫有錯誤,或者是否大小寫錯誤,或者根本不存在這個文件。
解決方案:
該目錄下有hello.py文件,打開該文件即可。
>>> f=open("hello.py") python知識拓展: 如何查看python解釋器當前路徑: >>> import os >>> os.getcwd() '/home/autotest'
查看python解釋器當前路徑下有哪些文件:
>>> os.listdir('/home/autotest') ['hello.py', 'email126pro']
5.2因文件權限問題報錯
報錯:
>>> f=open("hello.py") >>> f.write("test") Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: File not open for writing
原因:
open("hello.py")如果入?yún)]有加讀寫模式參數(shù)mode,說明默認打開文件的方式為只讀方式,而此時又要寫入字符,所以權限受限,才會報錯。
解決方案:
更改模式
>>> f=open("hello.py",'w+') >>> f.write("test")
6.KeyError字典鍵值錯誤
報錯:
常見報錯有,測試一接口,接口返回數(shù)據(jù)一般是json格式,而測試該接口校驗某個值是否正確,如果key拼寫錯了,就會報KeyError。簡單舉例如下:
>>> d={'a':1,'b':2,'c':3} >>> print d['a'] 1 >>> print d['f'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'f'
解決方案:
訪問d中有的鍵值,如a,b或c。
推薦書單:
你眼中的Python大牛 應該都有這份書單
Python書單 不將就
不可錯過的十本Python好書
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。