This repository was archived by the owner on Nov 3, 2023. It is now read-only.
File tree Expand file tree Collapse file tree 3 files changed +23
-1
lines changed Expand file tree Collapse file tree 3 files changed +23
-1
lines changed Original file line number Diff line number Diff line change @@ -11,6 +11,10 @@ Major Updates
11
11
12
12
* Support for Python 2.6 has been dropped (#206, #217).
13
13
14
+ Bug Fixes
15
+
16
+ * Made parser more robust to bad source files (#168, #214)
17
+
14
18
1.1.1 - October 4th, 2016
15
19
-------------------------
16
20
Original file line number Diff line number Diff line change @@ -209,14 +209,22 @@ def __init__(self, filelike):
209
209
self ._generator = tk .generate_tokens (filelike .readline )
210
210
self .current = Token (* next (self ._generator , None ))
211
211
self .line = self .current .start [0 ]
212
+ self .log = logging .getLogger ()
212
213
213
214
def move (self ):
214
215
previous = self .current
215
- current = next ( self ._generator , None )
216
+ current = self ._next_from_generator ( )
216
217
self .current = None if current is None else Token (* current )
217
218
self .line = self .current .start [0 ] if self .current else self .line
218
219
return previous
219
220
221
+ def _next_from_generator (self ):
222
+ try :
223
+ return next (self ._generator , None )
224
+ except (SyntaxError , tk .TokenError ):
225
+ self .log .warning ('error generating tokens' , exc_info = True )
226
+ return None
227
+
220
228
def __iter__ (self ):
221
229
while True :
222
230
if self .current is not None :
Original file line number Diff line number Diff line change @@ -126,6 +126,14 @@ def nested_3(self):
126
126
from __future__ import (, )
127
127
"""
128
128
129
+ source_invalid_syntax = """
130
+ while True:
131
+ \t try:
132
+ pass
133
+ """
134
+
135
+ source_token_error = '['
136
+
129
137
source_complex_all = '''
130
138
import foo
131
139
import bar
@@ -222,6 +230,8 @@ def test_import_parser():
222
230
source_future_import_invalid6 ,
223
231
source_future_import_invalid7 ,
224
232
source_future_import_invalid8 ,
233
+ source_token_error ,
234
+ source_invalid_syntax ,
225
235
), 1 ):
226
236
module = parse (StringIO (source_ucli ), 'file_invalid{}.py' .format (i ))
227
237
You can’t perform that action at this time.
0 commit comments