爱吃布林的我 发表于 2020-11-3 15:46

python捕获不了异常,大佬帮忙看看

本帖最后由 爱吃布林的我 于 2020-11-3 16:54 编辑

因为要显示消息桌面提醒,需要调用托盘图标和右下角桌面提醒。
当程序调用托盘消息跟气泡提醒失败时,程序会正常运行往下走,会抛出异常消息
但是现在按照我的理解却无法抓取到这个异常
这个无法显示托盘图标可以通过重启资源管理器解决,但是他捕获不了异常,我就不能给他重启资源管理器。就很烦
我的代码如下:from plyer import notification

try:
    notification.notify(
      title="有新的消息",
      app_name="1234",
      message="新消息!!!",
      app_icon="icon.ico",
      timeout=5
    )
    print('异常没抓到')
except Exception:
    print('抓到了异常')
else:
    print('正常运行')

异常运行结果如下:
异常没抓到
正常运行
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\93520WZ\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
File "C:\Users\93520WZ\AppData\Local\Programs\Python\Python38\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
File "C:\Users\93520WZ\AppData\Local\Programs\Python\Python38\lib\site-packages\plyer\platforms\win\libs\balloontip.py", line 208, in balloon_tip
    WindowsBalloonTip(**kwargs)
File "C:\Users\93520WZ\AppData\Local\Programs\Python\Python38\lib\site-packages\plyer\platforms\win\libs\balloontip.py", line 141, in __init__
    self.notify(title, message, app_name)
File "C:\Users\93520WZ\AppData\Local\Programs\Python\Python38\lib\site-packages\plyer\platforms\win\libs\balloontip.py", line 190, in notify
    raise Exception('Shell_NotifyIconW failed.')
Exception: Shell_NotifyIconW failed.

Process finished with exit code 0

根据错误提示找到了这个,但是他这个也是写着Exception啊,这我就不懂了
    def notify(self, title, message, app_name):
      '''
      Displays a balloon in the systray. Can be called multiple times
      with different parameter values.
      '''
      # remove previous visible balloon tip nofitication if available
      self.remove_notify()

      # add icon and messages to window
      hicon = self._hicon
      flags = NIF_TIP | NIF_INFO
      icon_flag = 0

      if hicon is not None:
            flags |= NIF_ICON

            # if icon is default app's one, don't display it in message
            if self._balloon_icon is not None:
                icon_flag = NIIF_USER | NIIF_LARGE_ICON

      notify_data = win_api_defs.get_NOTIFYICONDATAW(
            0, self._hwnd,
            id(self), flags, 0, hicon, app_name, 0, 0, message,
            NOTIFYICON_VERSION_4, title, icon_flag, win_api_defs.GUID(),
            self._balloon_icon
      )

      self._notify_data = notify_data
      if not win_api_defs.Shell_NotifyIconW(NIM_ADD, notify_data):
            raise Exception('Shell_NotifyIconW failed.')
      if not win_api_defs.Shell_NotifyIconW(NIM_SETVERSION,
                                              notify_data):
            raise Exception('Shell_NotifyIconW failed.')

senooo 发表于 2020-11-3 16:28

本帖最后由 senooo 于 2020-11-3 16:30 编辑

    app_icon="icon.ico",timeout=5)#目测你一行的缩进有问题吧,已经超出except的范围。

Rezalt 发表于 2020-11-3 16:38

app_icon这个参数的问题 检查一下图片的格式。图片有问题

爱吃布林的我 发表于 2020-11-3 16:51

senooo 发表于 2020-11-3 16:28
app_icon="icon.ico",timeout=5)#目测你一行的缩进有问题吧,已经超出except的范围。

这个是排版时没检查导致的,已更正,并不是这个问题导致的

爱吃布林的我 发表于 2020-11-3 16:53

Rezalt 发表于 2020-11-3 16:38
app_icon这个参数的问题 检查一下图片的格式。图片有问题

排版导致的,图片是能正常显示的哈。还能看出有其他问题吗?

Rezalt 发表于 2020-11-3 17:21

爱吃布林的我 发表于 2020-11-3 16:53
排版导致的,图片是能正常显示的哈。还能看出有其他问题吗?

你的代码复制了一份下来直接运行随便换上一个图标都是ok的 没毛病 其他参数基本不会影响程序的运行,唯一能够出问题的也就是在图标上面了

Rezalt 发表于 2020-11-3 17:24

Rezalt 发表于 2020-11-3 17:21
你的代码复制了一份下来直接运行随便换上一个图标都是ok的 没毛病 其他参数基本不会影响程序的运行,唯一 ...

https://www.baidu.com/favicon.ico 你用百度的试试看呗

sjh52pojie 发表于 2020-11-3 18:44

python不太懂的说,是不是函数参数调用的跟声明的不一致?包括顺序?

莫莫大侠 发表于 2020-11-3 19:59

这个函数调用了子线程,开辟一条新的栈,所以主线程方法的栈因此无法捕获到这一异常。 所以应该在子线程中处理异常。或者在子线程中设置flag标志位,在主线程中判断这个来捕获是否异常。

syz17213 发表于 2020-11-3 21:08

来看下是怎么回事
页: [1] 2
查看完整版本: python捕获不了异常,大佬帮忙看看