当前位置 博文首页 > 灰小猿的博客:全网最值得收藏的Python常见报错及其解决方案,再

    灰小猿的博客:全网最值得收藏的Python常见报错及其解决方案,再

    作者:[db:作者] 时间:2021-07-17 13:12

    目录

    一、Python2升级Python3发生的错误

    1、print 变成了 print()

    2、raw_Input 变成了 input

    3、整数及除法的问题

    4、异常处理大升级

    5、解决 “NameError: name 'xrange' is not definedw”?错误提示

    6、解决“name 'reload' is not defined 和 AttributeError: module 'sys' has no att” 错误提示

    7、解决”python unicode is not defined”?错误提示

    8、解决 “AttributeError: 'diet' object has no attribute 'has_key'?”错误提示

    9、解决“lmportError:?No module named urllib2”错误提示

    二、程序常见错误

    1、解决 “IndentationError:excepted an indented bloc” 错误提示

    2、解决“no?module named XX"错误提示

    3、解决“TypeError: 'tuple'?object cannot be interpreted as an integer"错误提示

    4、解决“lOError: File not open for writing”?错误提示

    5、解决“SyntaxError:invalid syntax”?错误提示

    6、解决“TypeError: 'str' object does not support item assignment”错误提示

    7、解决 “TypeError: Can't convert 'int' object to str implicitly”错误提示

    8、错误的使用类变量

    9、错误地理解Python的作用域


    ?

    Hello!你好呀,我是灰小猿,一个超会写bug的程序猿!

    前两天总结了一篇关于Python基础入门的文章“【全网力荐】堪称最易学的Python基础入门教程”,受到了很多小伙伴的点赞和支持,感兴趣的小伙伴可以去看一下,但是同时也是有很多人留言或者私信我说,刚开始接触基础知识并不牢固,在编程的时候还是会遇到很多的问题,所以今天在这里和大家总结记录一下Python开发中常见的错误排查及其解决方案,希望能对大家学习Python编程有所帮助,大家可以先收藏关注!之后遇到了慢慢解决!

    在编写并调试Python程序的过程中,总会遇到这样或那样的错误,其中绝大多数错误都是由于大家粗心或语法错误引起的。所以接下来我总结了常见的错误类型及其详细讲解和解决排查方案。

    一、Python2升级Python3发生的错误

    在当前Python开发中,Python2.7Python3.x两个大的版本分支。2.7的版本是比较老一点的,可能在网络教程、教学文档和出版图书中有的是用Python2.7实现的,

    但是现在的大部分Python开发已经使用了3.x的版本,所以当我们直接将Python 2.7代码运行在Python 3.x环境中时, 可能会发生一些语法错误。接下来就总结一下。

    ?

    1、print 变成了 print()

    Python2版本中,print是作为一个语句使用的,在 Python3版本中print作为一个函数出现。下面通过两段代码来展示两个版本的区别。

    Python 2.x版本代码如下:

    >>>i = 1
    >>>print ' Python * * is', 'number', i
    
    Pythonis number 1

    Python 3.x版本代码如下:

    >>>i = 1
    >>>print (' Python * * is ', * number', i)
    
    Pythonis number 1

    也就是说,在Python 3版本中,所有的print内容必须用小括号括起来。

    ?

    2、raw_Input 变成了 input

    Python 2版本中,输入功能是通过raw_input实现的。而在Python 3版本中,是通过input实现的。下面来看 两行代码的区别:

    name = input('What is your name?\n') #python3版本 的代码
    
    name = raw_input ("What is your name?\n") # python2 版本的代码

    ?

    3、整数及除法的问题

    刚开始学习在编写Python程序时,特别是将Python2的程序在Python 3环境下运行时,很可能会遇到?“TypeError: 'float* object cannot be interpreted as an integer”错误。例如下面的代码是在 Python 2 运行成功的:

    batch = 200
    for x in range(len(order_nos) / batch + 1):
    
    # do something

    其中order_nos是订单列表,而在Python 3环境下运行时会提“TypeError:'float' object cannot be interpreted as an integer”错误,意思是float类型不能解释为int类型。 这是因为在Python 3中,int和long统一为int类型int 表示任何精度的整数。在以前的Python 2版本中,如果参数是int或者是long的话,就会返回相除后结果的向下取整(floor),而如果参数是float或者是complex的话,那么就会返回相除后结果的一个恰当的近似。当使用int超过本地整数大小时,不会再导致OverflowError 异常。long类型在Python 3中已经消失,并且后缀L也已经弃用。

    下面是两个版本的除法对比:

    • 1/2 #Python 2版本中的结果是0

    • 1/2 #Python 3版本中结果是0.5,这样比较合理

    与之相对应的是,除法也发生了变化,Python 3中的“/”总是返回一个浮点数,永远表示向下除法。所以当涉及除法“/” 操作遇到 “TypeError: 'float'?object cannot be interpreted as an integer"错误时,只需将“/”修改为 “//” 即可。

    ?

    4、异常处理大升级

    Python 2程序中,捕获异常的格式如下:

    except Exception, identifier

    Python 3程序中,捕获异常的格式如下:

    except Exception as identifier

    例如,下面是Python 2捕获异常的演示代码:

    except ValueError, e: # Python 2处理单个异常
    except (ValueError, TypeError), e: # Python 2处理 多个异常

    而下面是Python 3捕获异常的演示代码:

    except ValueError as e: # Python3处理单个异常
    except (ValueError, TypeError) as e: # Python3处理多个异常

    Python 2程序中,抛出异常的格式如下:

    raise Exception, args

    Python 3程序中,抛出异常的格式如下:

    raise Exception(args)

    例如,下面两行代码演示了两种版本抛出异常的方法:

    raise ValueError, e # Python 2 .x 的方法
    
    raise ValueError(e) # Python 3.x 的方法

    ?

    5、解决 “NameError: name 'xrange' is not definedw”?错误提示

    这个错误也是版本问题,Python2使用的是xrange()函 数,在Python3版本被range()函数代替。所以在Python 3 程序中,只需将xrange修改为range即可解决这个问题。

    ?

    6、解决“name 'reload' is not defined AttributeError: module 'sys' has no att” 错误提示

    Python 3.6程序中不能直接使用reload,要想兼容 Python 2中的reload功能,需要加入如下所示的代码:

    import importlib
    importlib.reload(sys)

    ?

    7、解决”python unicode is not defined”?错误提示

    Python 3程序中经常会遇到"python unicode is not defined”错误提示,这是因为在Python 3中已经没有了 Unicode类型,被全新的str类型所代替。而Python 2中原有的str类型,在Python 3中被bytes所代替。

    ?

    8、解决 “AttributeError: 'diet' object has no attribute 'has_key'?”错误提示

    例如,下面的报错过程:

    >>> d={}
    >>> d.has_key('name')
    
    Traceback (most recent call last):
    
        File "<pyshell#l>", line 1, in <module>
    
            d.has_key(1name')
    
    AttributeError: * diet * obj ect has no attribute ' has_key * 

    这是因为在Python 3中已经舍弃了 has_key,修改方法 是用in来代替has_key,修改为:

    >>> d={}
    >>> 'name' in d
    
    True
    

    ?

    ?

    9、解决“lmportError:?No module named urllib2”错误提示

    在 Python 3 中 urllib2 已经被 urllib.request 替代,所以 解决方法是将urllib2修改为urllib.request。

    ?

    二、程序常见错误

    1、解决 “IndentationError:excepted an indented bloc” 错误提示

    这是一个很多初学者经常会犯的错误,这个错误会让人欲哭无泪!这个错误并不是语法错误的问题,而是用户代码书写规范的问题。因为Python是一个对代码缩进非常敏感的语言,个人认为这也是Python语言的一个缺陷哈,整个循环结构可能是依靠缩进的形式来表示的。

    cs