鱼C论坛

 找回密码
 立即注册
查看: 67|回复: 1

[已解决]设置了except Exception as e,程序不执行,还直接报错

[复制链接]
发表于 2025-1-26 10:24:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'

    def update_date_zs_minute_jhjj(self, index):
        self.date = DF_DATE_LIST[index]
        self.ZS = self.date_zs[self.date]
        self.setWindowTitle(f'{self.name}  {rs.date_zh(self.date)}')
        #上面的三句代码执行正确,没有任何问题
        try:
            # 文件路径是正确的,因为在self.date没有超出范围内,程序可以正常执行
            self.df_minute = pd.read_csv(f"D:/stock/minute/{self.code}/{self.date}.csv", encoding=de).values.tolist()
            self.df_jhjj = pd.read_csv(f"D:/stock/jhjj/{self.code}/{self.date}.csv", encoding=de).values.tolist()
        except Exception as e: #语句没有执行,程序直接报错,下面的print('a')语句也没有打印任何东西,except Exception as e:为什么没有执行
            print('a')
            self.df_minute = rs.tdx_history_trade(self.code, self.date)
            print(self.df_minute)
            self.df_jhjj = self.df_minute[0]
            del self.df_minute[0]
'

一下为报错内容:
Error calling Python override of QWidget::paintEvent(): Traceback (most recent call last):
  File "D:\pycharmprojects\入戏太深软件\入戏太深股票\软件实验.py", line 893, in paintEvent
    minute_k(qp=qp, w=self.width(), h=self.height(), window_h=0.18, end=3, df_minute=self.df_minute
                                                                                     ^^^^^^^^^^^^^^
AttributeError: 'MinuteK' object has no attribute 'df_minute'
最佳答案
2025-1-26 10:24:55
问题分析和解决方案

根据你描述的代码和报错信息,问题的核心在于`except Exception as e`并没有被触发,原因可能有以下几种:

  • 1. 初始化的问题  
    `AttributeError: 'MinuteK' object has no attribute 'df_minute'`表明代码在调用`self.df_minute`时,`self.df_minute`尚未初始化,导致程序直接报错,而没有进入`try-except`块。这可能是因为`paintEvent`方法在调用时,`self.df_minute`未被正确赋值。
  • 2. 异常未发生在`try-except`块内  
    异常实际发生的位置并不在`try`块内,因此不会触发`except Exception as e`,所以打印`'a'`的语句也没有执行。
  • 3. 界面刷新逻辑问题  
    `paintEvent`方法是由PyQt框架回调的,而不是用户主动调用的。若该方法依赖于`self.df_minute`,但在调用前`update_date_zs_minute_jhjj`方法未正确初始化数据,也会导致报错。


代码改进建议

为了解决这个问题,可以采取以下措施:

  • 1. 初始化`self.df_minute`和其他可能未定义的变量  
    为避免属性在未定义的情况下被使用,可以在类的`__init__`方法中初始化这些属性。
  • 2. 确认异常来源  
    通过在`try`块中添加更多日志,确认哪个代码部分可能引发异常。
  • 3. 确保`paintEvent`方法调用前,数据已被正确加载  
    在调用绘图逻辑时,添加属性检查,确保所有依赖的数据都已正确初始化。


修改后的代码示例

以下是改进后的代码:
class MinuteK:
    def __init__(self, ...):
        # 初始化必要变量,避免未定义错误
        self.df_minute = None
        self.df_jhjj = None

    def update_date_zs_minute_jhjj(self, index):
        self.date = DF_DATE_LIST
        self.ZS = self.date_zs
        self.setWindowTitle(f'{self.name}  {rs.date_zh(self.date)}')
        try:
            # 加载CSV文件
            self.df_minute = pd.read_csv(f"D:/stock/minute/{self.code}/{self.date}.csv", encoding=de).values.tolist()
            self.df_jhjj = pd.read_csv(f"D:/stock/jhjj/{self.code}/{self.date}.csv", encoding=de).values.tolist()
        except Exception as e:
            print(f"异常发生: {e}")
            self.df_minute = rs.tdx_history_trade(self.code, self.date)
            print(self.df_minute)
            self.df_jhjj = self.df_minute
            del self.df_minute

    def paintEvent(self, event):
        if not hasattr(self, 'df_minute') or self.df_minute is None:
            print("绘图依赖的数据尚未加载")
            return
        # 继续绘图逻辑...

代码关键点解释

  • 在`__init__`中初始化`self.df_minute`和`self.df_jhjj`为`None`,避免在未定义时直接使用。
  • 在`paintEvent`中进行数据检查,确保绘图所依赖的数据已被正确加载。
  • 在`try-except`块中增加日志,捕获和定位异常来源。


尝试上述修改后,如果还有问题,可以进一步提供上下文信息。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-1-26 10:24:55 | 显示全部楼层    本楼为最佳答案   
问题分析和解决方案

根据你描述的代码和报错信息,问题的核心在于`except Exception as e`并没有被触发,原因可能有以下几种:

  • 1. 初始化的问题  
    `AttributeError: 'MinuteK' object has no attribute 'df_minute'`表明代码在调用`self.df_minute`时,`self.df_minute`尚未初始化,导致程序直接报错,而没有进入`try-except`块。这可能是因为`paintEvent`方法在调用时,`self.df_minute`未被正确赋值。
  • 2. 异常未发生在`try-except`块内  
    异常实际发生的位置并不在`try`块内,因此不会触发`except Exception as e`,所以打印`'a'`的语句也没有执行。
  • 3. 界面刷新逻辑问题  
    `paintEvent`方法是由PyQt框架回调的,而不是用户主动调用的。若该方法依赖于`self.df_minute`,但在调用前`update_date_zs_minute_jhjj`方法未正确初始化数据,也会导致报错。


代码改进建议

为了解决这个问题,可以采取以下措施:

  • 1. 初始化`self.df_minute`和其他可能未定义的变量  
    为避免属性在未定义的情况下被使用,可以在类的`__init__`方法中初始化这些属性。
  • 2. 确认异常来源  
    通过在`try`块中添加更多日志,确认哪个代码部分可能引发异常。
  • 3. 确保`paintEvent`方法调用前,数据已被正确加载  
    在调用绘图逻辑时,添加属性检查,确保所有依赖的数据都已正确初始化。


修改后的代码示例

以下是改进后的代码:
class MinuteK:
    def __init__(self, ...):
        # 初始化必要变量,避免未定义错误
        self.df_minute = None
        self.df_jhjj = None

    def update_date_zs_minute_jhjj(self, index):
        self.date = DF_DATE_LIST
        self.ZS = self.date_zs
        self.setWindowTitle(f'{self.name}  {rs.date_zh(self.date)}')
        try:
            # 加载CSV文件
            self.df_minute = pd.read_csv(f"D:/stock/minute/{self.code}/{self.date}.csv", encoding=de).values.tolist()
            self.df_jhjj = pd.read_csv(f"D:/stock/jhjj/{self.code}/{self.date}.csv", encoding=de).values.tolist()
        except Exception as e:
            print(f"异常发生: {e}")
            self.df_minute = rs.tdx_history_trade(self.code, self.date)
            print(self.df_minute)
            self.df_jhjj = self.df_minute
            del self.df_minute

    def paintEvent(self, event):
        if not hasattr(self, 'df_minute') or self.df_minute is None:
            print("绘图依赖的数据尚未加载")
            return
        # 继续绘图逻辑...

代码关键点解释

  • 在`__init__`中初始化`self.df_minute`和`self.df_jhjj`为`None`,避免在未定义时直接使用。
  • 在`paintEvent`中进行数据检查,确保绘图所依赖的数据已被正确加载。
  • 在`try-except`块中增加日志,捕获和定位异常来源。


尝试上述修改后,如果还有问题,可以进一步提供上下文信息。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-5 22:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表