这些结构中哪个更好?

which of these structure is better?

我在 python 从事一个项目,我想过用两种方式编写相同的代码,但我想知道哪种结构在性能、语义和最佳实践方面更好。

version 1

if x == 1:
    try:
        order = cliente.order_market_buy(
                symbol = moeda,
                quoteOrderQty=quantidade)
        print(f'buy {order}')

    except Exception as erro:
        print(erro.status_code)
        print(erro.response)
        print(erro.code)
        print(erro.message)
        print(erro.request)
        if erro.code == -2010:
            print('no money')


elif x == -1:
    try:
        order = cliente.order_market_sell(
                symbol = moeda,
                quantity=quantidade)
        print(f'sell {order}')

    except Exception as erro:
        print(erro.status_code)
        print(erro.response)
        print(erro.code)
        print(erro.message)
        print(erro.request)
        if erro.code == -2010:
            print('no crypto')

version 2

try:
    if x == 1:
        order = cliente.order_market_buy(
                symbol = moeda,
                quoteOrderQty=quantidade)
        print(f'buy {order}')

    elif x == -1:
        order = cliente.order_market_sell(
                symbol = moeda,
                quantity=quantidade)
        print(f'sell {order}')


except Exception as erro:
        print(erro.status_code)
        print(erro.response)
        print(erro.code)
        print(erro.message)
        print(erro.request)
        if erro.code == -2010:
            if x == 1:
                print('no money')
            elif x == -1:
                print('no crypto')

两种代码做同样的事情,但是,第一种最容易调试,第二种更小更简洁。 两者花费相同的时间到达 运行.

还有其他更好的写法吗?

如果它在所有情况下都做大致相同的事情,那么在 IMO 中最好有一个异常块。以下是避免重复 if x 检查的方法:

try:
    if x == 1:
        currency = "money"
        order = cliente.order_market_buy(
            symbol=moeda,
            quoteOrderQty=quantidade
        )
        print(f'buy {order}')
    elif x == -1:
        currency = "crypto"
        order = cliente.order_market_sell(
            symbol=moeda,
            quantity=quantidade
        )
        print(f'sell {order}')
except Exception as erro:
        print(erro.status_code)
        print(erro.response)
        print(erro.code)
        print(erro.message)
        print(erro.request)
        print(f'no {currency}')