python - 有没有办法将多行代码放在 try except 块中,然后按顺序运行,即使抛出错误?
问题描述
我正在做一些数据分析并在 CSV 文件中创建新列。有时,当我遍历 pandas 数据框中的行时,会出现零除错误。发生这种情况时,我转到下一行。
更清洁的代码:
try:
self.sf1.loc[ind, 'quick'] = (row['assets'] - row['inventory']) / row['liabilities'] # Quick
self.sf1.loc[ind, 'current'] = row['assets'] / row['liabilities'] # Current
self.sf1.loc[ind, 'financial_lev'] = row['debt'] / row['equity'] # Financial Lev
except ZeroDivisionError:
continue
上面的代码比下面在功能上工作的其他方式更容易和更干净。唯一的问题是,如果任何代码行抛出 a ZeroDivisionError
,那么其他代码行都不会运行。
不干净的解决方案:
try:
self.sf1.loc[ind, 'quick'] = (row['assets'] - row['inventory']) / row['liabilities'] # Quick
except ZeroDivisionError:
continue
try:
self.sf1.loc[ind, 'current'] = row['assets'] / row['liabilities'] # Current
except ZeroDivisionError:
continue
try:
self.sf1.loc[ind, 'financial_lev'] = row['debt'] / row['equity'] # Financial Lev
except ZeroDivisionError:
continue
有没有办法做一些更类似于第一个代码气泡的事情,同时确保每一行代码都运行,即使上面的代码抛出错误?顺便说一句,这个尝试,除了块是在熊猫iterrows()
循环中。
解决方案
不,没有:这是try-except
范围的语义定义。
我不明白您对使用多个 PANDAS 矢量化的抱怨,因为两个代码示例都使用相同的。唯一的区别是异常处理和延续。
使用您当前的代码,请注意,如果您在第 4 行达到零除法,则第 5 行底部将保持不变。如果您需要面向行的继续控制,那么您必须明确执行所有所需的除法,检查每个单独操作的异常,而不是整个向量。
推荐阅读
- python - Windows 10 Defender 检测一切
- javascript - 为什么只取 1 然后在这里不起作用?
- node.js - TypeError('JwtStrategy 需要一个秘密或密钥')
- php - Heredoc 究竟如何处理花括号?
- visual-studio-code - 在远程 ssh 连接时,文件不会从 vscode 集成终端打开
- spring - 如何将 application.properties 参数列表转换为 application.yml
- swift - 错误:线程 1:“无法设置未准备好约束的视图层次结构的布局。” 使用自动布局时
- firebase - 从 listview 子小部件获取数据,该小部件不涉及 Flutter 中预先编写的全局键列表
- powershell - 如何使用函数参数
- sql - 选择查询中的一个或多个必需参数没有给出值