新手常见的python报错及解决方案

目录

1.NameError变量名错误

2.IndentationError代码缩进错误

3.AttributeError对象属性错误

4.TypeError类型错误

5.IOError输入输出错误

6.KeyError字典键值错误


1.NameError变量名错误 

点击返回目录

报错:

>>> print a

Traceback (most recent call last):

File "", line 1, in

NameError: name 'a' is not defined

解决方案:

先要给a赋值。才能使用它。在实际编写代码过程中,报NameError错误时,查看该变量是否赋值,或者是否有大小写不一致错误,或者说不小心将变量名写错了。

注:在Python中,无需显示变量声明语句,变量在第一次被赋值时自动声明。

>>> a=1

>>> print a

1


2.IndentationError代码缩进错误

点击返回目录

代码:

a=1b=2if a

print a

报错:

IndentationError: expected an indented block

原因:

缩进有误,python的缩进非常严格,行首多个空格,少个空格都会报错。这是新手常犯的一个错误,由于不熟悉python编码规则。像def,class,if,for,while等代码块都需要缩进。

缩进为四个空格宽度,需要说明一点,不同的文本编辑器中制表符(tab键)代表的空格宽度不一,如果代码需要跨平台或跨编辑器读写,建议不要使用制表符。

解决方案:

a=1b=2if a

    print a


3.AttributeError对象属性错误 

点击返回目录

报错:

>>> import sys

>>> sys.Path

Traceback (most recent call last):

File "", line 1, in

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: Jennifer

Project:显式等待'''fromseleniumimport webdriverfromselenium.webdriver.common.byimport Byfromselenium.webdriver.support.uiimport WebDriverWaitfromselenium.webdriver.supportimport expected_conditions as ECfromtimeimport 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)

原因:

类的函数__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 "", line 1, in

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 "", line 1, in

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 "", line 1, in

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 "", line 1, in

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 "", line 1, in

KeyError: 'f'

解决方案:

访问d中有的键值,如a,b或c。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,738评论 0 38
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,730评论 0 8
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,720评论 0 10
  • 飘荡的线叶绿色乌黑的长发打印机旁纸上有灰色线影短裤 你只是淡淡的笑无痕痛凝在心我拳击墙上大欢喜由你游离的眼神 有音...
    郁致阅读 693评论 0 1
  • 前几天读完了哥伦比亚当代著名小说家加夫列尔·加西亚·马尔克斯的经典长篇小说《百年孤独》。这部小说被认为是魔幻现实主...
    啊啊啊苗阅读 246评论 0 0