Python 中的条件异常处理

问题描述 投票:0回答:1

我正在处理列表中的事务,以便更轻松地访问各个数据项。

我已经设置了以下代码来使用

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'
并移至下一个模式项。

有没有办法做到这一点。

python conditional-statements try-catch
1个回答
0
投票

异常处理中不要做条件,只使用常规的

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)                      
© www.soinside.com 2019 - 2024. All rights reserved.