我正在处理列表中的事务,以便更轻松地访问各个数据项。
我已经设置了以下代码来使用
try-except
块逐项处理交易列表,以暂时排除有问题的交易。
示例交易可能如下所示(即
t
):
'(GOOGL) [ST]S (partial) 01/25/2024 02/01/2024 $1,001 - $15,000'
import re as rx
patterns = {
"ticker": r"\(([A-Z]+)",
"asset_type": r"\[([A-Z]+)",
"transaction_type": r"\([^)]*\)\s*\[[^\]]*\]\s*([A-Z])\s",
"amount": r"(\$[-\$\d, ]+)",
}
for t in transactions:
try:
data = {}
data['date'], data['trans_date'] = rx.findall(r'(\d+/\d+/\d+)', t)
for key, pattern in patterns.items():
data[key] = rx.search(pattern, t).group(1)
transaction_data.append(data)
except Exception as e:
print(f"{data}, {e}")
continue
上面的代码将交易解析为多个部分(例如,股票代码:“GOOG”、资产类型:“ST”等),并且我添加了 try catch 以简单地忽略暂时导致解析问题的交易。
我想向
try-catch
添加一个异常,如果在尝试解析 t
为 key
等于“transaction_type”时引发异常,我可以简单地分配一个默认值,而不是忽略整个值交易。例如,如果 key == 'asset_type' 抛出异常,只需设置 data[key] = 'ST'
并移至下一个模式项。
有没有办法做到这一点。
异常处理中不要做条件,只使用常规的
if/then
逻辑。
更换
for key, pattern in patterns.items():
data[key] = rx.search(pattern, t).group(1)
与
for key, pattern in patterns.items():
match = rx.search(pattern, t)
if key == 'transaction_type' and not match:
data[key] = 'ST' # Use default for missing transaction type
else:
data[key] = match.group(1)