如何在 Python 解释器上捕获 Sublime Text 异常?
How to catch Sublime Text exceptions on their Python interpreter?
如何在他们的 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.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 Text 上的一个错误。这是错误报告中的一个较小的重现:
import sublime_plugin
class TestCommandCommand(sublime_plugin.TextCommand):
def run(self, edit):
try:
ret = self.view.window().run_command("toggle_comment", {"comment": "no"})
except:
print("an exception")
else:
print(ret)
控制台:
reloading plugin User.test
command: test_command
Traceback (most recent call last):
File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 792, in run_
return self.run(edit, **args)
TypeError: run() got an unexpected keyword argument 'comment'
None
不用说,这只发生在 Python 命令中,而不是内部命令,因为它们根本不会出错。此外,当您尝试 运行 一个命令作为 sublime.active_window().run_command( "reveal_in_side_bar" )
而它不存在时,Sublime Text 不会抛出异常。这是为了让插件或菜单条目在不可用时不会抛出错误。
如何在他们的 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.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 Text 上的一个错误。这是错误报告中的一个较小的重现:
import sublime_plugin
class TestCommandCommand(sublime_plugin.TextCommand):
def run(self, edit):
try:
ret = self.view.window().run_command("toggle_comment", {"comment": "no"})
except:
print("an exception")
else:
print(ret)
控制台:
reloading plugin User.test
command: test_command
Traceback (most recent call last):
File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 792, in run_
return self.run(edit, **args)
TypeError: run() got an unexpected keyword argument 'comment'
None
不用说,这只发生在 Python 命令中,而不是内部命令,因为它们根本不会出错。此外,当您尝试 运行 一个命令作为 sublime.active_window().run_command( "reveal_in_side_bar" )
而它不存在时,Sublime Text 不会抛出异常。这是为了让插件或菜单条目在不可用时不会抛出错误。