「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。
这篇文章带大家解决Python语法错误 SyntaxError: invalid syntax
SyntaxError: invalid syntax
1、错误类型及排查思路
常见的错误:
-
SyntaxError:语法错误。检查拼写错误,是否缺少冒号、括号、分号等。
-
IndentationError:缩进错误。检查代码的缩进格式是否一致,建议使用空格缩进。
-
ImportError:导入模块失败。检查模块名拼写是否正确、模块路径是否正确。
-
NameError:检查引用的变量或函数是不是写错了或者还没定义。
-
TypeError:检查传递的参数类型是否正确,操作的不同类型是否兼容。比如:整数和字符串不能直接相加。
-
ValueError:参数类型正确但参数的值无法被操作。比如将字符串"abc"转换成整数类型。
-
IndexError:索引错误。比如列表只有3个元素,你却访问的索引却是5。
-
AttributeError:对象没有这个属性。检查是否拼写错误、这个版本是否移除或更换了这个属性。
-
KeyError:字典中没有这个键。检查拼写是否有误。
-
FileNotFoundError:检查文件路径是否拼写正确,文件是否被移动或删除。
标准错误:
- StopIteration:迭代器没有更多的值。比如列表有3个元素,你却迭代5次。
- ZeroDivisionError:除零无意义,任何数都不要除以零。
- NotImplementedError:尚未实现的方法
- UnboundLocalError:访问未初始化的本地变量
- TabError:Tab和空格混用
- FloatingPointError:浮点计算错误
- OverflowError:数值运算超出最大限制
- AssertionError:断言语句失败
- GeneratorExit:生成器发生异常来通知退出
- GeneratorExit:生成器(generator)发生异常来通知退出
- EOFError:没有内键输入,到达EOF标记
- IOError:输入/输出操作失败
- OSError:操作系统错误
- WindowsError:系统调用失败
- MemoryError:内存溢出错误(对于python解释器不是致命的)
- ReferenceError:弱引用(Weak Refence)试图访问已经垃圾回收的对象
- RuntimeError:一般的运行时错误
- SystemError:一般的解释器系统错误
- SystemExit:解释器请求退出
- KeyboardInterrupt:用户中断执行(通常是输入^C)
- UnicodeDecodeError:Unicode解码时的错误
- UnicodeEncodeError:Unicode解码时的错误
- UnicodeTranslateError:Unicode 转换时的错误
2、问题描述
代码明明写的没啥问题,但一执行就报错 SyntaxError: invalid syntax
报错信息翻译过来就是,语法错误,无效的语法。
3、原因&解决方案。
1)拼写错误,使用了Python不识别的关键字、语句不完整等。比如图中 from写成了form。
2)括号不匹配,比如前文少写了一个括号。
3)缩进错误,python用缩进来区分代码块,检查每个代码块的缩进是不是同一级别的,建议使用空格缩进,不要这里用tab缩进,那里用空格缩进。
4)引号不匹配,比如前文少写了一个引号,或者引号的中英文用混了,或者单双引号用混乱了。
5)未导入模块,比如你想用的函数需要导入其他模块,你以为你导入了,但实际上没有导入,或者模块导入错了。
比如用到 "string.ascii_uppercase[i]: i for i in range(10)",这条语句是为了在range(10)范围内添加字母索引,但是string是属于string模块的,需要在之前 import sting
6)模块冲突,比如你导入了一个模块,想使用这个模块里的函数,但你当前目录下有个同名的"模块",导致python找了你目录下的这个"模块"。
7)python版本不兼容,比如你复制了别人的代码,别人能运行但你啥也没改就运行不了,那就排查版本是不是不一样。
比如python2和python3的代码就是不兼容的,比如python3中 print要加(),python2中print就不用加括号。
python2里的很多函数到了pytyon3里就改名了,或者被遗弃了。把python换成相同的版本就可以了。
8)路径问题,比如路径没写全,路径没有进行转译。
9)忘记在 if, elif, else, for , while, class, def 声明末尾添加 冒号:
,
或者把 = 当成 == 用了;
或者if else 这类关键词没有对齐。
或者print打印时,字符串没有加引号。
3.1、Linux环境
Linux运行脚本时要在开头指定解释器 #!/usr/bin/env python3
,意思是使用python3执行脚本,不指定就会使用系统默认的解释器。