エラー・・・だと・・・
さて、前回つくったtoken関数と、next_char関数を合わせて、下のファイルを作ってみました。
#!/usr/bin/python
# coding: utf-8
def error():
print('error')
def next_char():
char = infile.read(1)
if not char: #EOFなら(file.read()は、EOFを検出すると空を返す)
char = 'end_of_file'
return char
def next_token():
token = ''
while token == '':
if char in spechar:
token = char
char = next_char()
elif char in letter:
token = char
char = next_char()
while char in (letter + digit):
token = token + char
char = next_char()
elif char in digit:
token = char
char = next_char()
while char in digit:
token = token + char
char = next_char()
elif char in ['\r', '\n', '\t', ' ']:
char = next_char()
elif char == 'end_of_file':
token = 'end_of_file'
else:
error()
return token
char = ''
infile = open('test.p', 'r')
while 1:
token = next_token()
if token == 'end_of_file':
print('EndOfFile')
break
print(token)
infile.close()
error関数は、とりあえず「error」って言うだけの手抜きw
まあ、動作確認が目的だからと言い訳しつつ、実行したのが下・・・
~/PasAvr$ python tokentest1.py
Traceback (most recent call last):
File "tokentest1.py", line 46, in <module>
token = next_token()
File "blogtest2.py", line 20, in next_token
if char in spechar:
UnboundLocalError: local variable 'char' referenced before assignment
・・・エラー・・・だと・・・
なになに、ローカル変数「char」を定義する前に参照している?
あれ?
最初に「char = ''」って宣言してるんですけど?だめなの?