色々なコードで試してみたところ、
#!/usr/bin/env python3.1 try: a = 1/0 except ZeroDivisionError as err: print(err)のようなコードで、
$ pyflakes test_excepthandler.py test_excepthandler.py:5: undefined name 'err'のような不要な警告が発生することが分かりました。
どうやら、Python 3で変更されたexcept節のasを使った記法を上手く扱えないようなのですが、これはかなり困ります。
そこで、てきとーに作成した下記のパッチを当ててみました。
diff -Naur pyflakes3k.orig/pyflakes/checker.py pyflakes3k/pyflakes/checker.py
--- pyflakes3k.orig/pyflakes/checker.py 2010-10-12 22:49:44.000000000 +0900
+++ pyflakes3k/pyflakes/checker.py 2010-10-12 22:56:51.000000000 +0900
@@ -102,6 +102,11 @@
+class ExceptHandler(Binding):
+ pass
+
+
+
class ExportBinding(Binding):
"""
A binding created by an C{__all__} assignment. If the names in the list
@@ -339,7 +344,7 @@
EQ = NOTEQ = LT = LTE = GT = GTE = IS = ISNOT = IN = NOTIN = ignore
# additional node types
- COMPREHENSION = EXCEPTHANDLER = KEYWORD = handleChildren
+ COMPREHENSION = KEYWORD = handleChildren
def addBinding(self, lineno, value, reportRedef=True):
'''Called when a binding is altered.
@@ -508,6 +513,11 @@
"Got impossible expression context: %r" % (node.ctx,))
+ def EXCEPTHANDLER(self, node):
+ self.addBinding(node.lineno, ExceptHandler(node.name, node), reportRedef=False)
+ for child_node in iter_child_nodes(node):
+ self.handleNode(child_node, node)
+
def FUNCTIONDEF(self, node):
# the decorators attribute is called decorator_list as of Python 2.6
if hasattr(node, 'decorators'):一応、直ったようには見えるのですが、もう少し様子を見てみます。
0 件のコメント:
コメントを投稿