此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题。希望帮助到刚入门的朋友们。
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编码规则。像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函数查看某个模块的属性
>>> 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:显式等待 ''' 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)
原因:
类的函数__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_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.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。
推荐书单:
你眼中的Python大牛 应该都有这份书单
Python书单 不将就
不可错过的十本Python好书
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍PHP常见的6个错误提示及解决方法,包括了PHP常见的6个错误提示及解决方法的使用技巧和注意事项,需要的朋友参考一下 在php开发过程中,由于不知道向谁求助而心慌意乱地判断以为自己不适合学php。其实错误在每个人学习过程中都会碰到的,千万不要妄自菲薄。很多错误在报错的代码提示中已经告诉我们了,仔细看,不会就百度。现总结一些常见的php错误,以共享php新人。 Php常见错误提示 一、
调用config 接口的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息。以下为常见错误及解决方法: invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,仅支持80(http)和443(https)两个端口,因此不需要填写端口号(一个appid可以绑定三个有效域名,见 ]目录1.1.1)。 invalid
不太会使用 Env 工具的请先看一遍 《Env 用户手册》(不长的,看完费不了几分钟) 提示 Env 工具和 源码 所处的目录都不能有中文或空格请先检查!! code 是一个命令 点 ‘.’ 是一个参数表示当前目录,中间有一个空格。 romfs ramfs 文件系统中的文件名和c的变量的命名一样,只能由英文字母开头且仅包含数字和下划线。 修改 qemu.bat 里面的参数时,要注意那是一行参数中间
本章内容包含常见错误码及错误信息描述,并给出解决问题的步骤。如果在开发过程中遇到报错,请先在本章中搜索解决方案,谢谢! 通用错误码,错误信息及解决方案 400(非法的client_id) client_id是否正确填写 client_id对应的申请应用是否通过审核 400(非法的client_secret) client_secret是否和client_id对应,有可能client_id是A应用的
本文向大家介绍MySQL常见错误有哪些_MySQL常见错误的快速解决方法,包括了MySQL常见错误有哪些_MySQL常见错误的快速解决方法的使用技巧和注意事项,需要的朋友参考一下 1. TokuFT file system space is really low and access is restricted 解决方法:修改tokudb_fs_reserve_percent参数,不过该参数是静止
本文向大家介绍laravel migrate初学常见错误的解决方法,包括了laravel migrate初学常见错误的解决方法的使用技巧和注意事项,需要的朋友参考一下 前言 最近断断续续开始 laravel 入门学习,想整个简单的通讯录系统,设立了两个表,一个 branches ,一个 contacts。在创建 migration 文件的时候,没有考虑仔细,先把 contacts 表建立了,con