国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

新手常見6種的python報錯及解決方法

2020-01-04 15:44:13
字體:
來源:轉載
供稿:網友

此篇文章整理新手編寫代碼常見的一些錯誤,有些錯誤是粗心的錯誤,但對于新手而已,會折騰很長時間才搞定,所以在此總結下我遇到的一些問題。希望幫助到剛入門的朋友們。

1.NameError變量名錯誤

報錯:

>>> print aTraceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'a' is not defined

解決方案:

先要給a賦值。才能使用它。在實際編寫代碼過程中,報NameError錯誤時,查看該變量是否賦值,或者是否有大小寫不一致錯誤,或者說不小心將變量名寫錯了。

注:在Python中,無需顯示變量聲明語句,變量在第一次被賦值時自動聲明。

>>> a=1>>> print a1

2.IndentationError代碼縮進錯誤

點擊返回目錄

代碼:

a=1b=2if a<b:print a

報錯:

IndentationError: expected an indented block

原因:

縮進有誤,python的縮進非常嚴格,行首多個空格,少個空格都會報錯。這是新手常犯的一個錯誤,由于不熟悉python編碼規則。像def,class,if,for,while等代碼塊都需要縮進。

縮進為四個空格寬度,需要說明一點,不同的文本編輯器中制表符(tab鍵)代表的空格寬度不一,如果代碼需要跨平臺或跨編輯器讀寫,建議不要使用制表符。

解決方案:

a=1b=2if a<b: print a

3.AttributeError對象屬性錯誤

報錯:

>>> import sys>>> sys.PathTraceback (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.TypeError類型錯誤

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: JenniferProject:顯式等待'''from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom time import ctimedriver=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)

原因:

類的函數__init__()需要兩個參數,但實際上給了三個。
EC.visibility_of_element_located類的入參應該是兩個入參: self和元組。但卻給了三個參數 self和*loc中的兩個元素作為入參。

解決方案:

這里要將EC.visibility_of_element_located(*loc)改為EC.visibility_of_element_located(loc),入參為元組,而不是元組里邊的兩個值。 

python知識拓展:

關于入參*的用法
以元組作為函數入參,如果元組前加*號,說明傳遞的入參為元組中的各個元素。如果元組前沒有加*號,說明傳遞的入參為元組本身。

舉例說明:
loc =(By.NAME,'email')
element1=WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(loc)) #只要一個參數(不考慮self情況下),元組loc,即:(By.NAME,'email')。 直接傳loc。
element2=driver.find_element(*loc)#需要兩個參數,元組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()函數需要一個入參,但是只給了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_stringsReturn 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.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()函數沒有指明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")

6.KeyError字典鍵值錯誤

報錯:

常見報錯有,測試一接口,接口返回數據一般是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。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 土默特右旗| 白银市| 赞皇县| 沈丘县| 龙泉市| 北流市| 潞城市| 巫溪县| 南通市| 安宁市| 彩票| 漳浦县| 永胜县| 乐平市| 湖口县| 甘洛县| 南江县| 城固县| 巴南区| 中西区| 新龙县| 澄江县| 湘乡市| 汝城县| 宁晋县| 南郑县| 广东省| 山丹县| 加查县| 武宁县| 崇明县| 奇台县| 双鸭山市| 冕宁县| 贺州市| 星子县| 老河口市| 鹿邑县| 禄劝| 樟树市| 青神县|