簡體   English   中英

如何在其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' )

但是,當它運行時,它只是無法捕獲它。 可以在TypeErrorExceptionBaseException類中嘗試使用它。 以下是完整的異常輸出。

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-ax-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.active_window().run_command( "reveal_in_side_bar" )該命令不存在時,Sublime Text不會引發異常。 這是為了使插件或菜單項在不可用時不會引發錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM