python - 缩进问题 Pycharm
问题描述
我是编码和 python 的新手,所以我正在做一个在线免费课程。我应该做的一项任务不能正常工作,显然问题是身份识别。这是代码:
c = 0
while c < 5:
c += 1
if c == 3:
continue
print (c)
所以最后一行与前一行对齐,只有在我从最后一行删除一个标识后,代码才能正常运行。如何将其配置为自动,这样我就不必一直删除它?
解决方案
TLDR:一般来说,不,您不能自动配置它。但是,在某些特定情况下,我们可以在 linter 的帮助下说语句肯定在错误的范围内。但是,即使在 linter 的帮助下,程序员仍然有责任实际纠正程序。
一般情况:
没有一种编程语言可以知道您希望语句处于什么范围内。那是由您,程序员,用语言表达的。Python 的作用域恰好由空格决定,而不是花括号,就像在其他一些流行语言(即 C/C++/Java/Perl)中一样。
考虑:
if x:
do_y()
do_z()
对比
if x:
do_y()
do_z()
两者都是合法的 Python 程序,并且都(可能)在逻辑上是正确的,具体取决于应用程序。也许您只想调用do_z()
ifx
为真(第一个示例)。或者也许你总是想打电话do_z()
不管x
(第二个例子)。只有应用程序开发人员可以决定他们想要哪个。您想要的实际上可能会随着时间的推移而改变,具体取决于具体情况。所以应该很清楚,这个决定(一般来说)不能自动做出。
使用 pylint:
但是,有时我们可以说某些语句肯定在错误的范围内(例如在上面的示例中,continue
永远无法到达紧接在 a 之后的语句)。
您可以使用 linter (like pylint
) 来帮助解决这个问题:
在test.py
我已经放置了你的问题代码并给了它一个快速的 pylint:
(so) URSA-MattM-MacBook:stackoverflow mmessersmith$ cat test.py
c = 0
while c < 5:
c += 1
if c == 3:
continue
print(c)
(so) URSA-MattM-MacBook:stackoverflow mmessersmith$ pylint test.py
************* Module test
test.py:1:0: C0111: Missing module docstring (missing-docstring)
test.py:1:0: C0103: Constant name "c" doesn't conform to UPPER_CASE naming style (invalid-name)
test.py:6:8: W0101: Unreachable code (unreachable)
------------------------------------------------------------------
Your code has been rated at 5.00/10 (previous run: 5.00/10, +0.00)
请注意这一行:test.py:6:8: W0101: Unreachable code (unreachable)
. 这告诉你第 6 行永远不会被执行,无论程序状态如何。
此外,请注意,任何 linter 仍然无法自动更正缩进。print(c)
语句应该缩进的地方有两种合法的可能性:
c = 0
while c < 5:
c += 1
if c == 3:
continue
print (c)
和
c = 0
while c < 5:
c += 1
if c == 3:
continue
print (c)
两者都是合法(且合理)的 Python 程序!第一个将c
在 while 循环的每次迭代中打印,第二个将仅c
在循环完成后打印。只有你,程序员,可以决定你喜欢哪一个。所有 linter 可以说的是“您几乎可以肯定并不是要在 a 之后立即放置一条语句continue
,因为该代码永远不会被执行”。
同样,这取决于您想要声明的位置。没有自动化工具可以自动为您放置语句,因为它不可能知道您想要完成什么。
推荐阅读
- jquery - 如何获得每个独特的价值
- sql - 基于 SQL Server 中另一个查询的 Where 子句
- json - JSON 模式连接具有属性的数组
- angularjs - 错误:[ng:areq] 参数“customersCtrl”不是函数,未定义
- c# - 使用 JsonConverter 存储传入 json 列表的通用类
- javascript - JS脚本出现网站错误发货方式无效
- php - 获取未捕获的错误:调用未定义的方法 Vehicles::setPassengerSeats()
- android - 如何在 Nodejs 中从 Android 智能手机检索短信?
- javascript - Jquery对多个元素的功能
- verilog - 系统verilog进程::state