你一定遇到过Python中的无效语法,常见原因和解决办法( 三 )
另一个例子是print , 它在python2和python3中有所不同:
文章插图
print是python2中的一个关键字 , 所以你不能给它赋值 。 然而 , 在python3中 , 它是一个可以赋值的内置函数 。
你可以运行以下代码来查看关键字列表 , 无论你运行的Python版本是什么:
import keywordprint(keyword.kwlist)yword.iskey
keyword还提供了有用的keyword.iskeyword() 。 如果你只是需要一个快速的方法来检查通过变量 , 那么你可以使用以下一行:
>>> import keyword; keyword.iskeyword('pass')True
这段代码将快速告诉您要使用的标识符是否是关键字 。
3.缺少括号、方括号和引号
通常 , Python代码中无效语法的原因是缺少或不匹配的右括号、方括号或引号 。 在嵌套圆括号的很长行或更长的多行块中很难发现这些 。 你可以通过Python的回溯来发现不匹配或缺失的引用:
>>> message = 'don't'File "", line 1message = 'don't'^SyntaxError: invalid syntax
这里 , 回溯指向无效代码 , 其中在结束单引号后有一个t' 。 要解决这个问题 , 您可以进行以下两种更改之一:
- 用反斜杠转义单引号('don\t')
- 将整个字符串用双引号括起来(“don't”)
>>> message = "This is an unclosed stringFile "", line 1message = "This is an unclosed string^SyntaxError: EOL while scanning string literal
这一次 , traceback中的插入符号指向问题代码 。 SyntaxError消息“在扫描字符串文字时的EOL”更具体一些 , 有助于确定问题 。 这意味着Python解释器在一个开放字符串关闭之前到达该行(EOL)的末尾 。 要解决这个问题 , 请使用与开始时匹配的引号关闭字符串 。 在本例中 , 将使用双引号(") 。在f-string语句中缺少引号也会导致Python中无效的语法:
# theofficefacts.pyages = {'pam': 24,'jim': 24,'michael': 43} print(f'Michael is {ages["michael]} years old.')
这里 , 打印的f-string中对ages字典的引用缺少关键引用的双引号 。 得到的回溯结果如下:$ python theofficefacts.pyFile "theofficefacts.py", line 7print(f'Michael is {ages["michael]} years old.')^SyntaxError: f-string: unterminated string
Python识别问题并告诉您它存在于f-string中 。 消息“未终止字符串”也指出了问题所在 。 本例中的插入符号仅指向f-string的开头 。当插入符号指向f-string的问题区域时 , 这可能没有那么有用 , 但是它确实缩小了您需要查找的范围 。 在那个f字串的某个地方有一个未终止的字符串 。 你只需要找到在哪里 。 要修复此问题 , 请确保所有内部f-string引号和方括号都已存在 。
缺少括号和方括号的情况大致相同 。 例如 , 如果您从列表中删除了右方括号 , 那么Python将会发现并指出它 。 然而 , 这有一些变化 。 第一种是把列表中的右括号去掉:
# missing.pydef foo():return [1, 2, 3print(foo())
当你运行这段代码时 , 你会被告知调用print()有一个问题:$ python missing.pyFile "missing.py", line 5print(foo())^SyntaxError: invalid syntax
这里发生的是Python认为列表包含三个元素:1、2和3 print(foo()) 。 Python使用空格从逻辑上对事物进行分组 , 因为从print(foo())中没有逗号或括号分隔3 , 所以Python将它们集中在一起作为列表的第三个元素 。另一种变化是在列表的最后一个元素后面添加一个逗号 , 同时仍然去掉右方括号:
# missing.pydef foo():return [1, 2, 3,print(foo())
现在你得到了一个不同的回溯:$ python missing.pyFile "missing.py", line 6^SyntaxError: unexpected EOF while parsing
在前面的例子中 , 3和print(foo())被集中在一起作为一个元素 , 但是在这里你可以看到一个逗号将两者分开 。 现在 , print(foo())的调用被添加为列表的第四个元素 , Python到达了文件的末尾 , 但没有使用右括号 。 回溯告诉您 , Python已经到达了文件(EOF)的末尾 , 但是它还在期待其他内容 。在本例中 , Python希望有一个右括号(]) , 但是重复的行和插入符号没有多大帮助 。 缺少括号和方括号是Python很难识别的 。 有时 , 您唯一能做的就是从插入符号开始 , 然后向后移动 , 直到您能够识别出缺失或错误的地方 。
更多内容 , 请访问原文:
#common-syntax-problems
结论在本教程中 , 您已经看到了SyntaxError回溯所提供的信息 。 您还看到了Python中许多常见的无效语法示例 , 以及这些问题的解决方案 。 这不仅会加快你的工作流程 , 而且还会使你成为一个更有帮助的代码审查者!
- 麒麟|荣耀新款,麒麟810+4800万超清像素,你还在犹豫什么呢?
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- 国产手机|国产手机新品频发,果粉们你们还能忍得住吗?
- 抖音小店|抖音进军电商,短视频的商业模式与变现,创业者该如何抓住机遇?
- 减重|快看!奇瑞蚂蚁都减重了 那你还焦虑什么?
- 化妆产品|直播带货年入百万,这8个行业告诉你:是真的
- 关华为P50Pro|华为P50Pro概念图:半圆形6摄,看完iPhone12劝你暂时别买
- 屏幕|苹果iPhone12屏幕不仅发白,还绿的你发慌,用户:环保绿
- 主题活动|首届“上海在线生活节”启动,8大电商平台优惠活动承包你的12月
- 月入|一上网,感觉网上每个人都是月入过万,到底是错觉还是你out了?