python - 在函数内使用模块时出现 UnboundLocalError?

标签 python import namespaces

string 导入时模块,与解析函数一起使用。

from string import punctuation


def parsing_func(data):
    if not any(i==v for i in data for v in punctuation.replace('_', '')):
        print data

使用 stringpunctuation就像上面的这个函数一样,一切正常。

然后我想根据几个较少的标点符号检查数据。所以我
已更改 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'> !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

打印出来很好,没有错误,并显示 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打印而不是字符串操作时返回错误?

最佳答案

您正在分配给 punctuation在您的函数内部,因此 Python 将其视为局部变量:因此它根本不使用全局名称。为作业使用不同的名称。

关于python - 在函数内使用模块时出现 UnboundLocalError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16124770/

相关文章:

php - 限制我的 spl_autoloader 只加载我的命名空间中的类?

php - Laravel - 多个具有相同名称的 Controller

Python 使用箭头更改区域设置

python - Python 中的 Twitter 时间线,但只得到 20 左右的结果?

python - 少量更改后,Python YouTube Gdata API损坏

ruby-on-rails - Rails CSV 导入文件的标题不在模型中

mysql - 将数千条记录从单个 txt 文件导入数据库 MySQL 的更快方法?

import - 如何从同级模块导入?

php - 类名中的下划线

python - Django 数据类型与 MySQL 类型