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:30 编辑
app_icon="icon.ico",timeout=5)#目测你一行的缩进有问题吧,已经超出except的范围。
app_icon这个参数的问题 检查一下图片的格式。图片有问题 senooo 发表于 2020-11-3 16:28
app_icon="icon.ico",timeout=5)#目测你一行的缩进有问题吧,已经超出except的范围。
这个是排版时没检查导致的,已更正,并不是这个问题导致的 Rezalt 发表于 2020-11-3 16:38
app_icon这个参数的问题 检查一下图片的格式。图片有问题
排版导致的,图片是能正常显示的哈。还能看出有其他问题吗? 爱吃布林的我 发表于 2020-11-3 16:53
排版导致的,图片是能正常显示的哈。还能看出有其他问题吗?
你的代码复制了一份下来直接运行随便换上一个图标都是ok的 没毛病 其他参数基本不会影响程序的运行,唯一能够出问题的也就是在图标上面了 Rezalt 发表于 2020-11-3 17:21
你的代码复制了一份下来直接运行随便换上一个图标都是ok的 没毛病 其他参数基本不会影响程序的运行,唯一 ...
https://www.baidu.com/favicon.ico 你用百度的试试看呗 python不太懂的说,是不是函数参数调用的跟声明的不一致?包括顺序? 这个函数调用了子线程,开辟一条新的栈,所以主线程方法的栈因此无法捕获到这一异常。 所以应该在子线程中处理异常。或者在子线程中设置flag标志位,在主线程中判断这个来捕获是否异常。 来看下是怎么回事
页:
[1]
2