1

我已经涉足 biopython 大约一年了,最近我升级到了 Biopython 1.59 版。我一直在通过一些教程来更新我的技能,但是当我运行 for 循环和 biopython 库中的任何模块时,我总是得到以下错误:

    IndentationError: expected an indented block

当我从命令行终端调用以 Komodo Edit 版本 7.0.2 编写的 .py 文件时,我只会收到此错误:

    Priyas-iMac:~ Priya$ python /Users/priya/Documents/Python/Tutorials/BioParse.py
    Traceback (most recent call last):
      File "/Users/priya/Documents/Python/Tutorials/BioParse.py", line 4, in <module>
        SeqIO.write(rc, "/Users/priya/Documents/Python/Tutorials/ls_orchid_rc.fasta", "fasta")
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Bio/SeqIO/__init__.py", line 400, in write
        from Bio import AlignIO
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Bio/AlignIO/__init__.py", line 147, in <module>
        import NexusIO
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Bio/AlignIO/NexusIO.py", line 19, in <module>
        from Bio.Nexus import Nexus
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Bio/Nexus/Nexus.py", line 15, in <module>
        import os,sys, math, random, copy
      File "/Users/Priya/Documents/Python/Tutorials/random.py", line 27
        randLowHigh(5,10)
        ^
    IndentationError: expected an indented block

当我使用命令行调用我一年前编写的旧 .py 文件时,它们运行良好。当我直接启动 python 并逐行输入教程示例时,它工作正常:

    Priyas-iMac:~ Priya$ python 
    Python 2.7.3 (default, Apr 19 2012, 00:55:09) 
    [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from Bio import SeqIO
    >>> for seq_record in SeqIO.parse("/Users/priya/Documents/Python/Tutorials/ls_orchid.txt","fasta"):
    ...      print seq_record.id
    ... 
    gi|2765658|emb|Z78533.1|CIZ78533
    gi|2765657|emb|Z78532.1|CCZ78532

如何修复我的 .py 文件以便我可以从终端运行它?

任何对此问题的见解将不胜感激!

普里亚

4

2 回答 2

2

原来我当初学python的时候,傻傻的把一个教程文件命名为“random.py”来练习制作一个随机数生成器。当 biopython 导入其他需要的模块时,它一直指向该文件而不是随机库模块:

  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Bio/Nexus/Nexus.py", line 15, in <module>
    import os,sys, math, random, copy
  File "/Users/Priya/Documents/Python/Tutorials/random.py", line 27
    randLowHigh(5,10)

谢谢大家的帮助!

于 2012-05-04T17:09:17.653 回答
1

检查导入的所有文件和模块是否具有相同的缩进(制表符或空格以及相同数量的空格)。

Python 代码的样式指南中,您可以阅读:

每个缩进级别使用 4 个空格。

对于您不想弄乱的真正旧代码,您可以继续使用 8 空格制表符。

关于制表符和空格:

切勿混合制表符和空格。

Python 最流行的缩进方式是仅使用空格。第二种最流行的方式是仅使用选项卡。使用制表符和空格混合缩进的代码应转换为仅使用空格。当使用 -t 选项调用 Python 命令行解释器时,它会发出有关非法混合制表符和空格的代码的警告。使用 -tt 时,这些警告会变成错误。强烈推荐这些选项!

对于新项目,强烈建议仅使用空格而不是选项卡。大多数编辑器都具有使此操作变得容易的功能。

也许 Komodo 正在自动更改某些内容(某些编辑会这样做)。尝试在更简单的编辑器中编辑文件并查找选项卡。您可以选择将空格和制表符显示为可见。

希望能帮助到你!

于 2012-05-04T14:54:53.337 回答