Module object differences in 2 versions of Sublime Text
在我用python编写的一个插件中,我发现了崇高文本v.2和v.3之间的区别。[我将插件向后移植,以便在使用v.3编写插件后与v.2一起使用。]
在
在尝试了各种方法之后,我解决了这种情况,当时我意识到,虽然API中没有记录,但
但是,我很想知道如果开发人员没有在他的v.3代码中保留
我的方法都以使用类的版本号为中心。
首先:
1 2 3 4 5 6 7 8 | sub_text_ver = sublime.version() if sub_text_ver < 3000: flags = sublime.DRAW_OUTLINED | sublime.DRAW_EMPTY_AS_OVERWRITE else: flags = sublime.DRAW_NO_FILL | sublime.DRAW_EMPTY_AS_OVERWRITE # Code continues... |
其次:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | sub_text_ver = sublime.version() if sub_text_ver < 3000: flags = self.get_regions_flags_sub_text_v2() else: flags = self.get_regions_flags_sub_text_v3() # Code continues to end of method and then... def get_regions_flags_sub_text_v2(self): return sublime.DRAW_OUTLINED | sublime.DRAW_EMPTY_AS_OVERWRITE def get_regions_flags_sub_text_v3(self): return sublime.DRAW_NO_FILL | sublime.DRAW_EMPTY_AS_OVERWRITE |
两者都给了我这样一个回溯错误:
1 2 3 4 | Traceback (most recent call last): File"./ExpandSelectionByRegex.py", line 155, in on_change File"./ExpandSelectionByRegex.py", line 177, in get_regions_flags_sub_text_v3 AttributeError: 'module' object has no attribute 'DRAW_NO_FILL' |
我想知道我可以采取什么方法来解决这个问题。我会被迫的吗?插件有两个不同的文件,每个版本都有一个。它可以在一个文件中用两个不同的类进行解析吗?是否可以在同一类中解决?我觉得当你遇到这些事情的时候,最好去了解它们,而不是仅仅因为目前的情况已经解决就把它们搁置起来。[很明显我不是最有经验的Python程序员。]谢谢。
我建议使用
1 2 3 4 | try: flags = sublime.DRAW_NO_FILL | sublime.DRAW_EMPTY_AS_OVERWRITE except AttributeError: # DRAW_NO_FILL was previously named DRAW_OUTLINED flags = sublime.DRAW_OUTLINED | sublime.DRAW_EMPTY_AS_OVERWRITE |
这被称为"请求宽恕比允许更容易"(EAFP)的编程风格。您编写一些您知道在某些情况下会引发异常的代码,并编写一个