16

Python 3.3.1 (win7) で奇妙な NameError が発生します。

コード:

import re

# ...

# Parse exclude patterns.
excluded_regexps = set(re.compile(regexp) for regexp in options.exclude_pattern)

# This is line 561:
excluded_regexps |= set(re.compile(regexp, re.I) for regexp in options.exclude_pattern_ci)

エラー:

Traceback (most recent call last):
  File "py3createtorrent.py", line 794, in <module>
    sys.exit(main(sys.argv))
  File "py3createtorrent.py", line 561, in main
    excluded_regexps |= set(re.compile(regexp, re.I) for regexp in options.exclude_pattern_ci)
  File "py3createtorrent.py", line 561, in <genexpr>
    excluded_regexps |= set(re.compile(regexp, re.I) for regexp in options.exclude_pattern_ci)
NameError: free variable 're' referenced before assignment in enclosing scope

エラーが発生する 561 行目は、上記のコードの2行目です。つまり、自由変数reではありません。これは単なる正規表現モジュールであり、最初の行で完全に参照できます。

への参照がre.I問題を引き起こしているように思えますが、その方法がわかりません。

4

3 に答える 3

19

ほとんどの場合、561 行目より下reのどこかで (おそらく不注意で) に代入していますが、同じ関数内にあります。これはあなたのエラーを再現します:

import re

def main():
    term = re.compile("foo")
    re = 0

main()
于 2013-05-14T14:16:54.233 に答える