2017-10-12 180 views
0

我想做的語義檢查的語言,我用ANTLR4生成解析器和訪問者類。但是我遇到了一個問題。 如果我用這個方法print(type(newList[0].expression()))
我會得到一個類型這樣<class 'IDILParser.IDILParser.IdenetExpressionContext'>
但是,如果我運行下面的代碼,我會得到這樣的NameError: name 'IDILParser' is not defined
我可以問如何解決這個問題的一個錯誤?謝謝!Python類型沒有定義

from antlr4 import * 
if __name__ is not None and "." in __name__:  
    from .IDILParser import IDILParser 
else: 
    from IDILParser import IDILParser 

class IDILVisitor(ParseTreeVisitor): 
    def visitAssign(self, ctx:IDILParser.AssignContext): 
     if type(newList[0].expression()) is IDILParser.IDILParser.IdenetExpressionContext: 
     ... 

回答

0

你做from IDILParser import IDILParser,這意味着IDILParser在你的代碼已經實際上可以指IDILParser.IDILParser

所以儘量帶走那一層:

if type(newList[0].expression()) is IDILParser.IdenetExpressionContext: 
    ... 

順便說一下,如果有疑問,如果你的代碼正在運行的模塊或腳本(又名相對進口做的工作或沒有),你也可以請執行以下操作:

try: 
    from .IDILParser import IDILParser 
except ImportError: 
    from IDILParser import IDILParser 
+0

我想檢查newList [0] .expression()的類型是否爲IDILParser.IdenetExpressionContext。我可以問怎麼做?謝謝! – FRANKfisher

+0

您是否嘗試過我的代碼?請注意,第一個** IDILParser **被刪除。 – Jeronimo

+0

你解決了這個問題嗎?我有一個類似的問題。 @Jeronimo你的解決方案不起作用。 「NameError」,名稱'IdilParser'未定義。 – user3142434

相關問題