【问题标题】:python unclear behavior when decrementing in try-exceptpython在try-except中递减时行为不明确
【发布时间】:2012-11-08 22:11:54
【问题描述】:

在 except 子句中减少变量时有什么特殊行为吗? sid 一直递增,直到它第一次进入异常子句,然后在 for 循环的剩余时间内保持相同的值。

105 次尝试中有 7 次抛出异常

没有打印输出“Fehlercode:”,错误代码

这是我的代码:

for bid in range(bidStart, bidEnd + 1):
    for syn in getSynsProBeitrag(bid):
        try:
            sid += 1
            query = "INSERT INTO zuord (bid, hid, sid) VALUES(%s, %s, %s)"
            cursor.execute(query, [bid, hid, sid])
            query2 = "INSERT INTO synonyme (synonym) VALUE (%s)"
            cursor.execute(query2, syn)

        except MySQLdb.IntegrityError, message:
            errorcode = message[0]      
            if errorcode == 1062:       
                sid -= 1
                print sid
            else:
                print "Fehlercode:", errorcode

已解决:在 query2 抛出它的第一个异常后,第一个查询也会导致(相同的)IntegrityError,然后它就像科琳所说的那样来回移动

【问题讨论】:

    标签: python increment behavior except decrement


    【解决方案1】:

    好吧,你在 except 子句中递减它,然后在 try 中递增它,所以它只是来回移动......如果它第一次失败,它会继续失败。

    例如

    try:
    1
    try:
    1+1=2 ->fail->id-1=1
    try:
    1+1=2 ->fail->id-1=1
    try:
    1+1=2 ->fail->id-1=1
    try:
    1+1=2 ->fail->id-1=1
    ....
    

    等等

    如果您尝试跳过失败的 id,请不要减少它。

    【讨论】:

    • 嗨,我试图在抛出异常时不要减少它,但是我的 ID 中有间隙。执行query2时抛出异常(表(列)具有唯一索引)
    • 我对您所说的“当执行 query2(表(列)具有唯一索引”的意思感到困惑 - 如果您知道问题仅来自 query2,那么将 try/除了在 query2 附近并将增量移到 try 之外。
    【解决方案2】:

    在except子句中递减时没有任何特殊行为。

    是不是因为同样的异常不断被抛出,所以它不断递减?我注意到您只有在收到相同的错误代码时才将其打印出来,您是否曾经收到过“Fehlercode:错误代码”的打印输出?

    【讨论】:

    • 嗨,感谢您的回答,异常在 105 次中被抛出了 7 次,我只是不明白为什么在第一个异常之后值不再改变,我没有打印出“ Fehlercode:" 错误代码
    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 2020-12-11
    • 2018-03-19
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多