色々なコードで試してみたところ、
#!/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 件のコメント:
コメントを投稿