当前位置: 首页 > news >正文

加了版本号会报错_新手常见的python报错及解决方案

03c58f055aea8a272be4a9f58669e8a2.png

此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题。希望帮助到刚入门的朋友们。后续会不断补充。目录
1.NameError变量名错误
2.IndentationError代码缩进错误
3.AttributeError对象属性错误
4.TypeError类型错误
5.IOError输入输出错误
6.KeyError字典键值错误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
12.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 a3.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'百度一下,你就知道')

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 filesworkspaceseleniumautotestcombattest_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'。直接传*loc4.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系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

相关文章:

  • 飞思卡尔芯片k66单片机溢出_PWM 初试溢出中断
  • 水卡修改金额_【技术分享】关于IC卡,水卡修改控制位教程
  • excel导出多重表头utils_java excel复杂表头和复杂数据导出
  • 程序异常退出的原因_Python异常处理详解(基础篇十一)
  • h5显示今天的时间_试驾红旗H5!红旗品牌卖得最火的车型,开起来究竟咋样?...
  • 雷迪9000使用说明_雷迪司UPS监控软件使用说明
  • libsvm python_LibSVM for Python 使用
  • 列表输出循环左移_Java Note-数据结构(3)列表
  • mysql 远程日志_将syslog ng日志写入MySQL(远程)数据库
  • mysql npe问题_万恶的 NPE 如何避免,几种你必须知道的方案!!!
  • dubbo monitor mysql_dubbox 的各种管理和监管
  • mysql传入Bean_mysql 表映射为java bean 手动生成。
  • mysql数据库程序员_大神程序员养成之路-Mysql数据库基础
  • mac svn客户端_SmartSVN 12 for Mac(SVN客户端)
  • mysql随机数据插入_mysql随机数据生成并插入
  • 230. Kth Smallest Element in a BST
  • docker python 配置
  • java中具有继承关系的类及其对象初始化顺序
  • JS基础之数据类型、对象、原型、原型链、继承
  • V4L2视频输入框架概述
  • 多线程 start 和 run 方法到底有什么区别?
  • 好的网址,关于.net 4.0 ,vs 2010
  • 聚类分析——Kmeans
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 什么是Javascript函数节流?
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 在weex里面使用chart图表
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​批处理文件中的errorlevel用法
  • #162 (Div. 2)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (04)odoo视图操作
  • (3)(3.5) 遥测无线电区域条例
  • (C#)一个最简单的链表类
  • (pytorch进阶之路)扩散概率模型
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • ..回顾17,展望18
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net core使用ef 6
  • .NET 发展历程
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net对接阿里云CSB服务
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET开发者必备的11款免费工具
  • .NET序列化 serializable,反序列化
  • .sh 的运行
  • /*在DataTable中更新、删除数据*/
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • :not(:first-child)和:not(:last-child)的用法
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [20160807][系统设计的三次迭代]
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [Android 数据通信] android cmwap接入点