python初学者常见的七种错误 (python小白中常见的错误操作)

Hello,小伙伴们,一切又回归紧张的上学或工作中,别忘了学习哦!

一不小心,python的基础课迎来了它的尾声,本章是最后一课啦!

从头学到到现在,真不容易,奖励一下我们自己吧!任何形式的奖励都行!

python初学者应避免的2个常见错误,python初学者常见的5个错误

在运行python时,经常会遇到各种各样的错误,大的来说,基本上可以把错误分为两类,语法错误(syntax errors)和异常(exceptions)。

语法错误(syntax errors)是初学者最容易犯的错误,简单来说就是代码不符合Python的基本语法规范而导致程序出了问题。

当你的代码完全符合Python的语法规范后,就该尝试运行程序了。但在程序运行过程中,还是有可能会发生问题,我们把这类问题称为异常(exceptions)

python初学者应避免的2个常见错误,python初学者常见的5个错误

1、语法错误

语法错误(syntax errors)是初学者最容易犯的错误,如果代码不符合Python的语法规范,比如漏了冒号,混用中英文符号等,就会出现这种错误。

1.1:SyntaxError: invalid syntax(无效语法)

这是语法错误中最常见的一种了,通常是由下面几种情况引起的。

1.1.1 遗漏了标点符号

需要检查标点符号是否有遗漏,像是在函数定义的时候,括号后面是否有冒号;if条件判断和while循环中的条件后面是否有冒号;for循环的可迭代对象后是否有冒号;还有就是字典中每一个键值对之间是否有逗号等等。

还有就是你可能将==写成了=,没有将等于和赋值区分开。

1.1.2 关键字拼写错误或遗漏。

很有可能是因为你手抖或者粗心,将while写成了whlie,将def写成了dfe之类的错误,或者可能是你将for…in…中的关键字in忘写了。

1.1.3变量名或函数名使用了关键字。

这种情况即使是Python中级玩家也有概率会犯错,python3中的内置关键字:and,as,assert,break,class,continue,def,del,elif,else,except,False,finally,for,from,global,if,import,in,is,lambda,None,not,nonlocal,or,pass,raise,return,True,try,while,with,yield大部分的开发环境都会用不同颜色来显示关键字。

1.2、SyntaxError: invalid character in identifier(标识符中有无效字符)

有时候运行代码,会出现SyntaxError: invalid character in identifier这个错误。这有可能是你在写代码时频繁地切换中英文输入法所造成的。知道了问题出现的原因,解决办法也就呼之欲出了,将我图片中标记出来的中文标点修改为对应的英文符号即可。

1.3、NameError: name 'xxx' is not defined - 这通常表示代码中引用了一个未定义的变量或函数。

1.4、ValueError: invalid literal for int() with base xxx - 这通常表示代码中尝试将无效的字符串转换为整数。

1.5、KeyError: 'xxx' - 这通常表示代码中尝试使用不存在的键访问字典。

1.6、AttributeError: 'xxx' object has no attribute 'xxx' - 这通常表示代码中尝试访问不存在的属性。

1.7、SyntaxError: EOL while scanning string literal(检查到不完整的字符串)

这种情况通常是因为遗漏了字符串两边的引号,或者混用了引号(即字符串两边的引号不统一)。

1.8、IndentationError 缩进错误

在Python中,冒号下面的缩进会帮助程序区分代码之间的层次,这些不同的层次代表了代码运行的逻辑及先后顺序。但如果在需要缩进的语句下面没有使用正确的缩进层级,甚至没有使用缩进,程序就会报错。

1.9.1 IndentationError: expected an indented block(需要缩进的代码块)

myname='张三'

if myname=='张三':

print('就是你')

当没有缩进时,if条件判断和需要运行的print()语句会成为两个独立的语句,可以理解为“平行关系”。

这样,第二行的if条件判断下面就缺少了可以运行的语句。那么无论条件是否成立,都不会有任何对应的操作,所以这个条件判断就失去了存在的意义。

1.9.2 IndentationError: unindent does not match any outer indentation level(缩进内容不匹配任何一个层级)

a = 0

while a < 5:

if a == 3:

break

a += 1

print(a)

代码中的最后一行,print(a)无法找到属于它的代码块。即print(a)要么和if条件判断平级,要么直接与while循环平级。它现在的缩进层级使Python无法识别出它到底属于哪一部分,要让上面的代码顺利运行,需要将print(a)调整到和if条件判断平级,这样程序就会打印每次循环后a的值。或者,将print(a)调整到和while循环平级,这样程序就会打印最后一次循环后a的值。

1.10、TypeError: xxx() takes xxx positional arguments but xxx were given - 这通常表示代码中函数调用时传入了错误的参数数量或类型。

python初学者应避免的2个常见错误,python初学者常见的5个错误

2、异常处理

2.1、异常的定义与产生

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。

异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

2.2、异常处理

捕捉异常可以使用try/except语句,try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。

语法:

以下为简单的 try...except...else 的语法:

try :<语句> #运行别的代码 except <名字>:<语句> #如果在try部份引发了'name'异常 except <名字>,<数据>:<语句> #如果引发了'name'异常,获得附加的数据 else :<语句> #如果没有异常发生

python初学者应避免的2个常见错误,python初学者常见的5个错误

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

· 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。

· 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。

· 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:

以只读方式打开文件,由于原本没有该文件,读取发生了异常,实例

try : open ( "qwe.txt" , "r" ) print ( "123" ) except FileNotFoundError : #错误的标题 print ( "异常处理" ) #错误的内容 else : print ( "没有异常" )

#结果:异常处理

下面是以读取的方式打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:

try : f= open ( "test01.txt" , encoding = 'utf-8' ) print (f.read()) except ( NameError , FileNotFoundError , TypeError ) as rese: #捕获多种异常 print ( "出现异常:" , rese) else : print ( "没有异常" ) #出现异常: [Errno 2] No such file or directory: 'test01.txt'

python初学者应避免的2个常见错误,python初学者常见的5个错误

2.3、try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码。

finally块中的所有语句执行后,异常被再次触发,并执行except块代码。

python初学者应避免的2个常见错误,python初学者常见的5个错误

try :<语句> finally :<语句> #退出try时总会执行 raise

示例代码:

try : open ( "test0001.txt" ) except : print ( "出现异常" ) else : print ( "没有异常" ) finally : print ( "有没有异常都会执行" )

来人上复杂点的:

try : runoob() except AssertionError as error: print (error) else : try : with open ( 'file.log' ) as file: read_data = file.read() except FileNotFoundError as fnf_error: print (fnf_error) finally : print ( '这句话,无论异常是否发生都会执行。' )

再来看一例:

try : fh = open ( "testfile" , "w" ) try : fh.write( "这是一个测试文件,用于测试异常!!" ) finally : print ( "关闭文件" ) fh.close() except IOError : print ( "Error: 没有找到文件或读取文件失败" ) #输出:关闭文件

python初学者应避免的2个常见错误,python初学者常见的5个错误

2.4、抛出异常

Python 使用 raise 语句抛出一个指定的异常。

raise语法格式如下:raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

示例代码:

def ss (score): if score< 0 or score> 100 : raise Exception ( 'Invalid score' , score) else : print ( 'score:' , score)ss( 200 )

结果:(0-100内正常)

raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

try : raise NameError ( 'HiThere' ) # 模拟一个异常。 except NameError : print ( 'An exception flew by!' ) raise

2.5、自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接 或间接的方式。

class Networkerror( RuntimeError ): def __init__ ( self , arg): self .args = arg try : raise Networkerror( "Bad hostname" ) except Networkerror as e: print (e.args) #('B', 'a', 'd', ' ', 'h', 'o', 's', 't', 'n', 'a', 'm', 'e')

再来一个复杂点的:

class Error( Exception ): # def __init__(self): #初始化方法(没有参数) # pass def __init__ ( self , len , atleast): #初始化方法(有参数) self .lenth=len self .minlenth=atleast def main (): try : word= input ( '请输入密码:' ) if len (word)< 6 : # raise引发自定义的异常,raise Error()实例化没有参数 raise Error( len (word) , 6 ) #实例化方法 except Exception as re: #re是一个对象 # print('Error:输入密码长度过短!!!') #没有参数传递 # print('Error:输入密码长度过短,密码长度至少为%d位' % (Error.minlenth), re) # #类不能调用实例属性 AttributeError: type object 'Error' has no attribute 'minlenth' print ( 'Error:输入密码长度过短,密码长度至少为%d位 \n ' %(re.minlenth) , 're:' , re) else : print ( '无异常' ) main()

输出结果:

python初学者应避免的2个常见错误,python初学者常见的5个错误

python初学者应避免的2个常见错误,python初学者常见的5个错误

3、标准错误与异常

下面列出了系统已定义好的各种错误和异常,可以直接引用。

python初学者应避免的2个常见错误,python初学者常见的5个错误

python初学者应避免的2个常见错误,python初学者常见的5个错误

python初学者应避免的2个常见错误,python初学者常见的5个错误

python初学者应避免的2个常见错误,python初学者常见的5个错误

愉快学习的时光总是过得很快,一不小心又到结尾啦,并且是本系列课程的结尾。

先来给自己一个奖励,双手举起,yeah!

希望大家能一如既往地每天学习一点python,并能用于日常工作中。

后续还会推出高级课程,请大家关注我oceansl,或私信我,让我们一起成长吧。

python初学者应避免的2个常见错误,python初学者常见的5个错误