do not print error context that resulted from encoding errors (i.e. it's unprintable...
authorStefan Behnel <scoder@users.berlios.de>
Wed, 11 Jun 2008 14:38:01 +0000 (16:38 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Wed, 11 Jun 2008 14:38:01 +0000 (16:38 +0200)
Cython/Compiler/Errors.py

index 331ad921ac319c5c23ec8fd32664f28fe6a32cf9..42e139d3ad4ca0d2983f44e1d8d92bb85c5f2f44 100644 (file)
@@ -17,10 +17,15 @@ def context(position):
     source = position[0]
     assert not (isinstance(source, unicode) or isinstance(source, str)), (
         "Please replace filename strings with Scanning.FileSourceDescriptor instances %r" % source)
-    F = list(source.get_lines())
-    s = ''.join(F[max(0, position[1]-6):position[1]])
-    s += ' '*(position[2]-1) + '^'
-    s = '-'*60 + '\n...\n' + s + '\n' + '-'*60 + '\n'
+    try:
+        F = list(source.get_lines())
+    except UnicodeDecodeError:
+        # file has an encoding problem
+        s = "[unprintable code]\n"
+    else:
+        s =''.join(F[max(0, position[1]-6):position[1]])
+        s = '...\n' + s + ' '*(position[2]-1) + '^\n'
+    s = '-'*60 + '\n' + s + '-'*60 + '\n'
     return s
     
 class CompileError(PyrexError):