有没有办法将Python代码中的缩进转换为大括号?

85 投票
11 回答
12474 浏览
提问于 2025-04-11 09:20

我是一名完全失明的程序员,想学习Python。不过,代码块用不同的缩进来表示,这对我来说是个大难题。我在想有没有什么工具,可以让我用大括号或者其他符号来写代码,然后把这种格式转换成Python解释器能用的正确缩进格式?

11 个回答

10

虽然我不是盲人,但我听说过很多关于 Emacspeak 的好评。自从他们在1998年发布的 8.0版本 以来,就一直有Python模式(现在他们似乎已经更新到28.0版本了!)。绝对值得一试。

13

我个人觉得现在可能没有这样的情况,因为很多喜欢Python的人都喜欢它是用空格来分隔的。

不过,我从来没有把这个当作无障碍问题来考虑过。也许可以把这个提出来,作为一个bug报告给Python?

我猜你在这里使用的是屏幕阅读器来查看输出吧?所以制表符对你来说可能是“看不见”的?如果是盲文输出,可能会更容易阅读,但我完全理解这可能会让人感到困惑。

实际上,这对我来说非常有趣。我希望我能有足够的知识来写一个应用程序,能为你解决这个问题。

我觉得这绝对是我应该提交一个bug报告的事情,除非你已经自己做过,或者不想这样做。

编辑:另外,正如John Millikin提到的,还有PyBraces,这可能是一个可行的解决方案,具体能不能做到还得看你的编程技能,希望如果可以的话,你能把它分享给其他需要的人。

编辑2:我刚刚在Python的bug追踪器上报告了这个问题。

59

你的问题有一个解决方案,它是和Python一起提供的。这个工具叫做 pindent.py,在Windows安装的Tools\Scripts目录下可以找到(我这边的路径是C:\Python25\Tools\Scripts)。如果你是在Linux或OSX上运行,可能需要从svn.python.org下载它。

这个工具可以在代码块结束时添加注释,或者在有注释的情况下正确缩进代码。下面是使用这个工具的一个例子:

pindent.py -c myfile.py

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
       # end if
   else:
       print 'oops!'
   # end if
# end def foobar

原始的 myfile.py 文件内容是:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'

你还可以使用 pindent.py -r 来根据注释插入正确的缩进(具体细节可以查看 pindent.py 的头部说明),这样你在写Python代码的时候就不用担心缩进的问题了。

比如,运行 pindent.py -r myfile.py 会把 myfile.py 中的代码转换成同样正确缩进(并且也加上注释)的代码,就像上面 pindent.py -c 的例子一样:

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
# end if
else:
print 'oops!'
# end if
# end def foobar

如果你想知道我最后使用了什么解决方案,或者需要进一步的帮助,请在这个帖子下留言,我会尽量帮忙。

撰写回答