[Biopython-dev] Error in tutorial program

Jeffrey Chang jchang at smi.stanford.edu
Thu Oct 24 19:56:00 EDT 2002


Hi Ben,

Yep, you're right.  The example doesn't work, since the information in
the UndoHandle created by the scanner is lost in every iteration.
Thanks for the patch.  I have committed it.  Please let me know if
there are any further problems!

Jeff



On Fri, Oct 18, 2002 at 08:01:39AM -0400, abc at palantir.chem.emory.edu wrote:
> Hi,
> 
> I've been working through the Tutorial document and I noticed that the
> Cypripedioideae FASTA parsing example is somewhat broken.  The
> Doc/examples/fasta_consumer.py script works if you use the
> ls_orchid.fasta file from the same directory.  However, if you do your own
> Entrez search and run the script on it you will get an error like this:
> 
> 
> Traceback (most recent call last):
>   File "./x.py", line 32, in ?
>     extract_organisms('/home/abc/x.fasta', 95)
>   File "./x.py", line 27, in extract_organisms
>     scanner.feed(file_to_parse, consumer)
>   File "/usr/local/lib/python2.2/site-packages/Bio/Fasta/__init__.py", line 225, in feed
>     self._scan_record(uhandle, consumer)
>   File "/usr/local/lib/python2.2/site-packages/Bio/Fasta/__init__.py", line 229, in _scan_record
>     self._scan_title(uhandle, consumer)
>   File "/usr/local/lib/python2.2/site-packages/Bio/Fasta/__init__.py", line 234, in _scan_title
>     read_and_call(uhandle, consumer.title, start='>')
>   File "/usr/local/lib/python2.2/site-packages/Bio/ParserSupport.py", line 331, in read_and_call
>     raise SyntaxError, errmsg
> SyntaxError: Line does not start with '>':
> TCAGCGGTGGCTCACTGACTGGGTTGCATCCAAGTGGCCGTCACCGCCCATGGGGTTGACGTGCCTCCAA
> 
> The problem occurs because the individual records in the search output that I
> get aren't separated by newlines like the ones in ls_orchid.fasta.  The
> Bio.Fasta._Scanner class can't handle this format unless the file handle you
> pass to it implements the `saveline' method (even though it doesn't say this).
> fasta_consumer.py just passes a regular python file object.
> 
> Below are a couple of simple fixes.  The _Scanner patch potentially breaks
> existing code, so maybe it's not so good.
> 
> Regards,
> 
> Ben
> 
> 
> 
> 
> --- Doc/examples/fasta_consumer.py	2001/02/01 05:45:28	1.3
> +++ Doc/examples/fasta_consumer.py	2002/10/17 15:31:36
> @@ -1,6 +1,8 @@
>  from Bio.ParserSupport import AbstractConsumer
>  from Bio import Fasta
> +from Bio.File import UndoHandle
>  
> +
>  import string
>  
>  class SpeciesExtractor(AbstractConsumer):
> @@ -19,9 +21,9 @@
>  def extract_organisms(file, num_records):
>      scanner = Fasta._Scanner()
>      consumer = SpeciesExtractor()
> -
> -    file_to_parse = open(file, 'r')
>  
> +    file_to_parse = UndoHandle(open(file, 'r'))
> +    
>      for fasta_record in range(num_records):
>          scanner.feed(file_to_parse, consumer)
> 
> 
> 
> 
> 
> --- Bio/Fasta/__init__.py	2001/07/05 23:56:49	1.4
> +++ Bio/Fasta/__init__.py	2002/10/17 15:30:47
> @@ -211,15 +211,12 @@
>      def feed(self, handle, consumer):
>          """feed(self, handle, consumer)
>  
> -        Feed in FASTA data for scanning.  handle is a file-like object
> -        containing FASTA data.  consumer is a Consumer object that will
> -        receive events as the FASTA data is scanned.
> +        Feed in FASTA data for scanning.  handle is an instance of
> +        File.UndoHandle containing FASTA data.  consumer is a Consumer
> +        object that will receive events as the FASTA data is scanned.
>  
>          """
> -        if isinstance(handle, File.UndoHandle):
> -            uhandle = handle
> -        else:
> -            uhandle = File.UndoHandle(handle)
> +        assert isinstance(handle, File.UndoHandle):
>          
>          if uhandle.peekline():
>              self._scan_record(uhandle, consumer)
> 
> _______________________________________________
> Biopython-dev mailing list
> Biopython-dev at biopython.org
> http://biopython.org/mailman/listinfo/biopython-dev



More information about the Biopython-dev mailing list