【发布时间】:2016-09-13 02:36:15
【问题描述】:
如何在 Python 解释器上捕获 Sublime Text 异常?
这已迁移到https://github.com/SublimeTextIssues/Core/issues/1359
我正在尝试捕捉这个异常:
try:
print( 'RUNNING' )
sublime.active_window().run_command( "side_bar_update_sync" )
isNotSyncedSideBarEnabled = False
print( 'RUNNING THIS' )
except BaseException:
isNotSyncedSideBarEnabled = True
print( 'RUNNING THIS ALSO' )
但是当它运行时,它只是没有捕捉到它。如果我在TypeError、Exception 或BaseException 类中尝试它并不重要。下面是完整的异常输出。
reloading plugin SublimeDefaultSyntax.default_syntax
READ_PREF_ASYNC!!!!
updateIsSyncedSideBarEnabled!!!!
RUNNING
Traceback (most recent call last):
File "D:\User\Dropbox\Applications\SoftwareVersioning\SublimeText\sublime_plugin.py", line 538, in run_
return self.run()
TypeError: run() missing 1 required positional argument: 'enable'
RUNNING THIS
isNotSyncedSideBarEnabled: False
问题是,python 无法捕获run_command( "side_bar_update_sync" ) 抛出的异常。当没有 self 传递时,捕获错误(例如尝试调用 self.view)的异常工作正常。这是完整的代码:
def plugin_loaded():
global isNotSyncedSideBarEnabled
packageControlSettings = sublime.load_settings('Package Control.sublime-settings')
userSettings = sublime.load_settings('Preferences.sublime-settings')
def updateIsSyncedSideBarEnabled():
global isNotSyncedSideBarEnabled
print(' updateIsSyncedSideBarEnabled!!!!')
sublime.active_window().run_command( "reveal_in_side_bar" )
try:
print( 'RUNNING' )
sublime.active_window().run_command( "side_bar_update_sync" )
isNotSyncedSideBarEnabled = False
print( 'RUNNING THIS' )
except BaseException:
isNotSyncedSideBarEnabled = True
print( 'RUNNING THIS ALSO' )
print( 'isNotSyncedSideBarEnabled: ' + str( isNotSyncedSideBarEnabled ) )
def read_pref_async():
print('READ_PREF_ASYNC!!!!')
updateIsSyncedSideBarEnabled()
def read_pref_package():
print('READ_PREF_PACKAGE!!!!')
updateIsSyncedSideBarEnabled()
def read_pref_preferences():
print('READ_PREF_PREFERENCES!!!!')
updateIsSyncedSideBarEnabled()
# read initial setting, after all packages being loaded
sublime.set_timeout_async( read_pref_async, 1000 )
# listen for changes
packageControlSettings.add_on_change( "Package Control", read_pref_package )
userSettings.add_on_change( "Preferences", read_pref_preferences )
#print( userSettings.get( "ignored_packages" ) )
#print( packageControlSettings.get( "installed_packages" ) )
本次讨论之后可能会出现这个 Sublime Text 论坛的帖子:https://forum.sublimetext.com/t/how-to-add-remove-a-default-menu-entry-when-a-x-package-is-isnt-enabled-installed/22753?u=addons_zz
这是异常中显示的文件中的行:
532 class ApplicationCommand(Command):
533 def run_(self, edit_token, args):
534 args = self.filter_args(args)
535 if args:
536 return self.run(**args)
537 else:
538 return self.run()
539
540 def run(self):
541 pass1
542
543 ... other classes
【问题讨论】:
-
堆栈跟踪与您的源代码无关。是否被截断?你在这里有什么:
sublime_plugin.py", line 538, in run_? -
堆栈跟踪上的文件是带有崇高文本shipped file picture的文件。我将在主帖中添加这些行内容。我的代码在插件上,该插件由另一个崇高文件运行/调用/调用。
标签: python exception exception-handling sublimetext3 sublime-text-plugin