При импорте из модуля string
для использования с функцией синтаксического анализа.UnboundLocalError при использовании модуля внутри функции?
from string import punctuation
def parsing_func(data):
if not any(i==v for i in data for v in punctuation.replace('_', '')):
print data
Использование string
«s punctuation
как в этой функции выше, все работает отлично.
Я тогда хотел проверить данные против нескольких меньших знаков препинания. Поэтому я изменил parsing_func
к этому:
def parsing_func(data):
punctuation = punctuation.replace('_', '')
punctuation = punctuation.replace('()', '')
if not any(i==v for i in data for v in punctuation):
print data
но это возвращает:
Traceback (most recent call last):
File "parser.py", line 58, in <module>
parsing_func(data)
File "ex.py", line 8, in parsing_func
punctuation = punctuation.replace('_', '')
UnboundLocalError: local variable 'punctuation' referenced before assignment
Итак, я делаю тест функция проверки punctuation
:
def test_func1():
print type(punctuation), punctuation
>>> <type 'str'> !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~
, которая печатает нормально, нет ошибки и показывает type str
. Наконец, я пытаюсь собрать print
и операцию строки один за другим.
def test_func2():
print type(punctuation), punctuation
punctuation = punctuation.replace('_', '')
но теперь print
оператор возвращает ошибка:
Traceback (most recent call last):
File "parser.py", line 9, in <module>
test_func2()
File "parser.py", line 5, in test_func2
print type(punctuation), punctuation
UnboundLocalError: local variable 'punctuation' referenced before assignment
Является ли это namespace
ошибки и почему test_func2
возвращает ошибку при переходе к печати, а не на строковой операции?
Ваш последний пример предполагает, 'data' не нужны дубликаты или заказ. –
@Lattyware: Он выглядел как только что проверенный код OP, чтобы увидеть, содержит ли строка какие-либо знаки препинания, поэтому я не думаю, что это требует какого-либо заказа. – Blender
Это хороший момент, я не думал об этом как о замене теста. –