gpt4 book ai didi

Python 脚本利用 pass 进行异常处理,pass 似乎无法正常运行

转载 作者:太空宇宙 更新时间:2023-11-04 10:53:06 25 4
gpt4 key购买 nike

我正在编写一个脚本,它将从我们的星号系统中回填调用详细记录到我们的 MySQL 日志数据库中。在下面的代码中,我试图忽略重复键并继续到下一行,但是当这段代码执行时,我所看到的只是第一行欺骗警告,然后脚本退出(下面的示例 2)。导致它失败的明显错误?

请原谅我糟糕的 Python 礼仪,我对这门语言还很陌生。我的假设是,即使 pass 可能会跳出异常,foreach 循环也不会继续存在。

编辑/注意:在我解决退出 for 循环的问题后,这也值得一提:因为我有一个 finally: block 关闭了 sql 连接, finally: block 在 except: pass 之后执行并关闭连接。所以在上面的例子中,finally: 仍然导致程序异常终止。

#!/usr/bin/python -d

import csv
import sys
import MySQLdb as mdb
log="Master.csv"

try:
con = mdb.connect('1.2.3.4','abcd','efgh','ijkl')
cur = con.cursor()

#Inefficient way of getting row count.
rcount = csv.reader(open(log, 'rb'))
print "Number of rows in csv: %d" % (len(list(rcount)))

#OK, real csv processing now.
reader = csv.reader(open(log, 'rb'))

iter = 0
for row in reader:
print "Row: %d" % (++iter)

clid = row[0]
src = row[1]
dst = row[2]
dcontext = row[3]
channel = row[4]
dstchannel = row[5]
lastapp = row[6]
lastdata = row[7]
start = row[8]
end = row[10]
duration = row[11]
billsec = row[12]
disposition = row[13]
amaflags = row[14]
accountcode = row[15]
uniqueid = row[16]

insertstr= "INSERT INTO cdr_extended (duration,billsec,amaflags,start,end,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,disposition,accountcode,uniqueid) VALUES (%s,%s,0,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');" % (duration,billsec,start,end,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,disposition,accountcode,uniqueid)
cur.execute(insertstr)
con.commit()

except mdb.Error, e:
if e.args[0] == 1062:
print "Dupe key on uniqueid: %s" % (uniqueid)
pass
else:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)

finally:
if con:
con.close()

输出:

Number of rows in csv: 2696
Row: 0
Dupe key on uniqueid: 1342632723.8

最佳答案

将您的 try...except block 仅包裹在会导致异常的代码周围,该代码位于 for 循环中。我不使用 MySQLdb,但像这样的东西应该可以工作:

            try:
insertstr= "INSERT INTO cdr_extended (duration,billsec,amaflags,start,end,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,disposition,accountcode,uniqueid) VALUES (%s,%s,0,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');" % (duration,billsec,start,end,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,disposition,accountcode,uniqueid)
cur.execute(insertstr)
con.commit()
except mdb.Error, e:
if e.args[0] == 1062:
print "Dupe key on uniqueid: %s" % (uniqueid)
else:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)

关于Python 脚本利用 pass 进行异常处理,pass 似乎无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12359797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com