您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页新手常见的python报错及解决方案

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

来源:华佗小知识
新⼿常见的python报错及解决⽅案

此篇⽂章整理新⼿编写代码常见的⼀些错误,有些错误是粗⼼的错误,但对于新⼿⽽已,会折腾很长时间才搞定,所以在此总结下我遇到的⼀些问题。希望帮助到刚⼊门的朋友们。后续会不断补充。⽬录

1.NameError变量名错误 报错:

>>> print a

Traceback (most recent call last):File \"\NameError: name 'a' is not defined解决⽅案:

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

注:在Python中,⽆需显⽰变量声明语句,变量在第⼀次被赋值时⾃动声明。>>> a=1>>> print a1

2.IndentationError代码缩进错误代码:

a=1b=2if a报错:

IndentationError: expected an indented block原因:

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

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

a=1b=2if a3.AttributeError对象属性错误 报错:>>> import sys

>>> sys.Path

Traceback (most recent call last):File \"\

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 webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as ECfrom 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\est_4_7_1_webdriverwait.py\ 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 \"\

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 \"\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 \"\

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 \"\IOError: File not open for writing原因:

open(\"hello.py\")如果⼊参没有加读写模式参数mode,说明默认打开⽂件的⽅式为只读⽅式,⽽此时⼜要写⼊字符,所以权限受限,才会报错。解决⽅案:更改模式

>>> f=open(\"hello.py\>>> 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 \"\KeyError: 'f'解决⽅案:

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务