python程序报错了?不要慌

作者: 亭子青年 | 来源:发表于2017-08-31 22:26 被阅读67次

    大家好,我还是那个在家带孩子的宝妈,那个有态度的tester(伪测试)

    我今天来说说,各位刚刚开始学习python的时候经常遇到的几个问题,思考来源于虫师的书籍,如果对大家有所帮助,非常开心。

    缩进错误

    python语言最具特色的是使用缩进来标明成块的代码,在python中,对程序的缩进有严格的要求,一般建议使用四个空格,当然有人也愿意用tab键也是没有问题的,只是在一个项目中,建议要么使用4个空格,要么使用tab,绝对不要混用,否则可能出现缩进报错的几率很高。

    如果代码中出现异常信息IndentationError: expected an indented block,请不要惊慌,你代码中缩进出问题了。下面我们写一个制造一个异常情况

    def dict_to_set(dict_ob,set_ob):
        for key, value in dict_ob.items():
        set_ob.add(key)    #这里缩进有问题
            if isinstance(value, dict):
                dict_to_set(value, set_ob)
            elif isinstance(value, list):
                for li in value:
                    dict_to_set(li,set_ob)
        return set_ob
    if __name__ == "__main__":
        dict01 = {"name":"ting","pass":"123","family":[{"name":"tian","age":1},{"name":"zhou","age":26}]}
        my_set = set()
        print(dict_to_set(dict01,my_set))
    

    执行结果:

    我制造了一个异常.png

    引包错误

    这里只需要说明一下,python的引包机制首先从当前目录开始找是否存在你引入的包名,如果存在就会优先引用当前目录下的文件。

    也就是说,如果我在a.py文件中使用import unittest,如果当前目录下存在一个unittest.py的文件,那么我就不能成功的使用py内置的unittest模块了。

    所以,大家在命名文件名的时候一定要注意,不要和python自带的模块名冲突。

    编码错误

    在开发python程序的时候,会涉及3个方面的编码

    1. python程序文件编码,可以在程序的开头使用#coding=utf-8进行申明
    2. python程序运行环境编码
    3. python读取外部文件,网页的编码
      最容易出现问题的情况就是当python读取外部文件,网页的时候,首先我们要确定读取的文件,网页的编码格式,然后通过decode()和encode()方法来进行编码转换
      decode(解码):作用是将其他编码的字符串转换成Unicode编码
      encode(编码):是将unicode编码转换成其他编码的字符串

    学会分析错误

    我们在编写代码的时候,肯定会经常遇到一大堆的报错,那么掌握读取错误信息的方法是非常重要的,一般我们需要遵循两个点,一是找到自己写的程序(文件名,所在行,所在函数,出错地方),二是看最终的错误提示,根据上面亮点,就可以轻松的锁定范围,找到问题所在了。

    写在后面的话

    真的很感谢互联网,让我有机会向这么多有经验的前辈学习。

    相关文章

      网友评论

      • 秋之川:感谢互联网,让我结识到了这么多热爱学习的朋友们:smile:
        亭子青年:@秋之川 感谢老川
      • 倔强的潇洒小姐:3好像都不用指定coding=utf-8,已经让所有的字符串都是 unicode了
        倔强的潇洒小姐:@亭子青年 :smile: 受2的影响很大
        亭子青年:@倔强的潇洒小姐 但是习惯性的我还是会加入一行申明,记得之前学习py2的时候,感觉编码真的要搞起我

      本文标题:python程序报错了?不要慌

      本文链接:https://www.haomeiwen.com/subject/bzmcjxtx.html