在我的程序中,我遍历.csv文件的行并对每个文件执行操作。在某些情况下,程序由ValueError终止。当发生这种情况时,我想打印一条错误消息,然后转到下一行,而不是让程序停止。这是迭代文件的代码:
with open(filename, 'rb') as f:
reader = csv.reader(f, dialect=csv.excel_tab)
for row in reader:
strrow = str(row)
getInfo(strrow)
答案 0 :(得分:1)
你想要的是使用try-catch块。它基本上是在try-block中执行代码,当发生异常时(并且存在匹配的catch-block),它会执行块。
with open(filename, 'rb') as f:
reader = csv.reader(f, dialect=csv.excel_tab)
try:
for row in reader:
strrow = str(row)
getInfo(strrow)
except ValueError:
print "Oops! That was no valid row..."
来源: Python Doc
答案 1 :(得分:0)
我认为这是try-except块的典型用例:
with open(filename, 'rb') as f:
reader = csv.reader(f, dialect=csv.excel_tab)
for row in reader:
try:
strrow = str(row)
getInfo(strrow)
except ValueError:
print('Error!')
答案 2 :(得分:0)
其他答案是正确的,可以将try: except:
标识为此处使用的代码,但是已经错误地应用了它。为了避免捕获您实际需要了解的错误(在这种情况下,让您实际上继续迭代reader
),只有您明确要处理其错误的行需要包含在{{ 1}}。由于没有太多不能成为字符串,我猜这意味着:
try
然而,这确实提出了一些问题:
with open(filename, 'rb') as f:
reader = csv.reader(f, dialect=csv.excel_tab)
for row in reader:
strrow = str(row)
try:
getInfo(strrow)
except ValueError:
print("Couldn't process line: {0}".format(strrow))
?使用getInfo
将文件从字符串解析为列表似乎毫无意义,然后将列表转换回字符串,当您实际可以传递列表时(并且可能保存一些解析)。csv
内?在该函数中,您确切地知道该行的哪一部分出了什么问题(因此可以向用户提供更有用的消息);在外面,你所知道的是某些东西出错了。如果您进行了这两项更改,则此处的代码会更简单:
getInfo