gpt4 book ai didi

新手常见6种的python报错及解决方法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章新手常见6种的python报错及解决方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题。希望帮助到刚入门的朋友们.

1.NameError变量名错误 。

报错:

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

解决方案:

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

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

?
1
2
3
>>> a = 1
>>> print a
1

2.IndentationError代码缩进错误 。

点击返回目录 。

代码:

?
1
2
3
4
a = 1
b = 2
if a<b:
print a

报错:

?
1
IndentationError: expected an indented block

原因:

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

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

解决方案:

?
1
2
3
4
a = 1
b = 2
if a<b:
  print a

3.AttributeError对象属性错误 。

报错:

?
1
2
3
4
5
6
>>> 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即可.

?
1
2
>>> 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入参类型错误 。

代码:

?
1
2
3
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关于元组作为入参 。

代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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()

报错:

?
1
2
3
4
5
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其他 。

报错:

?
1
2
3
4
5
6
>>> 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个入参.

解决方案:

加一个入参 。

?
1
2
>>> os.listdir( '/home/autotest' )
[ 'hello.py' , 'email126pro' ]

python知识拓展:

如何查看某个函数的使用,可以使用help查看.

?
1
2
3
4
5
6
7
8
9
>>> 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非函数却以函数来调用 。

报错:

?
1
2
3
4
5
>>> t = ( 'a' , 'b' , 'c' )
>>> t()
Traceback (most recent call last):
File "<stdin>" , line 1 , in <module>
TypeError: 'tuple' object is not callable

原因:

t为元组,元组不能被调用,不能加()。初学者编写代码时,偶尔粗心会将变量当做方法来调用(不小心加了括号)。所以要认真检查下是否变量加了括号,或者方法漏加了括号.

解决方案:

将括号去除.

?
1
2
>>> t
( 'a' , 'b' , 'c' )

5.IOError输入输出错误 。

5.1文件不存在报错 。

报错:

?
1
2
3
4
>>> 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文件,打开该文件即可.

?
1
2
3
4
5
6
7
8
9
>>> f = open ( "hello.py" )
 
python知识拓展:
 
如何查看python解释器当前路径:
 
>>> import os
>>> os.getcwd()
'/home/autotest'

查看python解释器当前路径下有哪些文件:

?
1
2
>>> os.listdir( '/home/autotest' )
[ 'hello.py' , 'email126pro' ]

5.2因文件权限问题报错 。

报错:

?
1
2
3
4
5
6
>>> 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,说明默认打开文件的方式为只读方式,而此时又要写入字符,所以权限受限,才会报错.

解决方案:

更改模式 。

?
1
2
>>> f = open ( "hello.py" , 'w+' )
>>> f.write( "test" )

6.KeyError字典键值错误 。

报错:

常见报错有,测试一接口,接口返回数据一般是json格式,而测试该接口校验某个值是否正确,如果key拼写错了,就会报KeyError。简单举例如下:

?
1
2
3
4
5
6
7
>>> 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.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://www.cnblogs.com/yufeihlf/p/6068589.html#test0 。

最后此篇关于新手常见6种的python报错及解决方法的文章就讲到这里了,如果你想了解更多关于新手常见6种的python报错及解决方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com