此篇文章整理新手編寫代碼常見的一些錯誤,有些錯誤是粗心的錯誤,但對於新手而已,會折騰很長時間才搞定,因此在此總結下我遇到的一些問題。但願幫助到剛入門的朋友們。後續會不斷補充。python
1.NameError變量名錯誤json
點擊返回目錄spa
報錯:
>>> 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
代碼:
a=1
b=2
if a<b: print a
報錯:
IndentationError: expected an indented block
緣由:
縮進有誤,python的縮進很是嚴格,行首多個空格,少個空格都會報錯。這是新手常犯的一個錯誤,因爲不熟悉python編碼規則。像def,class,if,for,while等代碼塊都須要縮進。
縮進爲四個空格寬度,須要說明一點,不一樣的文本編輯器中製表符(tab鍵)表明的空格寬度不一,若是代碼須要跨平臺或跨編輯器讀寫,建議不要使用製表符。
解決方案:
a=1
b=2
if a<b: print a
報錯:
>>> 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函數查看某個模塊的屬性
>>> dir(sys)
['__displayhook__', '__doc__', '__egginsert', '__excepthook__', '__name__', '__package__', '__plen', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
4.1入參類型錯誤
代碼:
t=('a','b','c')
for i in range(t): print a[i]
報錯:
TypeError: range() integer end argument expected, got tuple.
緣由:
range()函數指望的入參是整型(integer),但卻給的入參爲元組(tuple)
解決方案:
將入參元組t改成元組個數整型len(t)
將range(t)改成range(len(t))
4.2入參個數錯誤
4.2.1關於元組做爲入參
代碼:
# 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):
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()函數須要一個入參,可是隻給了0個入參。
解決方案:
加一個入參
>>> os.listdir('/home/autotest')
['hello.py', 'email126pro']
python知識拓展:
如何查看某個函數的使用,可使用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()函數須要一個path路徑入參,函數結果返回值是由字符串組成的列表。
4.3非函數卻以函數來調用
報錯:
>>> 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.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()函數沒有指明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")若是入參沒有加讀寫模式參數mode,說明默認打開文件的方式爲只讀方式,而此時又要寫入字符,因此權限受限,纔會報錯。
解決方案:
更改模式
>>> f=open("hello.py",'w+')
>>> f.write("test")
報錯:
常見報錯有,測試一接口,接口返回數據通常是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。