Python 发生错误时重新启动脚本,并继续使用csv文件中的右行
嗨,伙计们,这是我第一次在这里寻求帮助,希望你们能帮助我 我有我写的代码Python 发生错误时重新启动脚本,并继续使用csv文件中的右行,python,selenium,Python,Selenium,嗨,伙计们,这是我第一次在这里寻求帮助,希望你们能帮助我 我有我写的代码 def my_function(): try : with open('file.csv', 'r') as f: data = list(csv.reader(f, delimiter=',')) i = 1 while i <= 10: i += 1 fname = data[i][0]
def my_function():
try :
with open('file.csv', 'r') as f:
data = list(csv.reader(f, delimiter=','))
i = 1
while i <= 10:
i += 1
fname = data[i][0]
lname = data[i][1]
options = Options()
driver = webdriver.Chrome(options=options)
driver.get("https://www.test.net/")
#Do staff
except Exception as e:
print(e)
driver.quit()
time.sleep(1)
print('******RESTART******')
my_function()
my_function()
def my_函数():
尝试:
将open('file.csv','r')作为f:
数据=列表(csv.reader(f,分隔符=','))
i=1
当i时,您可以将i
设置为默认值为1
的关键字参数,然后在每次异常时,在重新启动函数时传递当前的i
,以便它从那里拾取
这是一个简化的示例,我建议您遵循您在问题中使用的相同一般方法(但使用假数据,这样我就可以在没有CSV文件的情况下运行它)
def my_函数(i=1):
尝试:
如果i==4:#防止永远递归
回来
其他:
打印(i)#跟踪循环
i+=1
x=int('te')#导致错误
除值错误外:
我的_功能(i)#将当前i发送回
我的_函数(i=0)
感谢您的快速回复。。我尝试了–Kevin Welch和–Selcuk提供的解决方案,它对我很好thx
这是解决办法
def my_function():
try :
with open('file.csv', 'r') as f:
data = list(csv.reader(f, delimiter=','))
i = 1
while i <= 10:
i += 1
try :
fname = data[i][0]
lname = data[i][1]
options = Options()
driver = webdriver.Chrome(options=options)
driver.get("https://www.test.net/")
# Do staff
except Exception as e:
print(e)
driver.quit()
time.sleep(1)
print('******RESTAR******')
continue
my_function()
def my_函数():
尝试:
将open('file.csv','r')作为f:
数据=列表(csv.reader(f,分隔符=','))
i=1
而我您的代码使这比它需要的困难得多
首先,几乎可以肯定的是,您不希望将整个代码块包装在“catch all”异常处理程序中。您希望异常处理足够具体(有限),以便可以对异常执行有意义的操作。例如:
#!python
# Assumes Python version 3 or later
import sys, csv
filename='myfile.csv'
with open(filename as f:
try:
reader = csv.reader(f)
for record in reader:
if len(record) != 2:
# log error and continue
print('Malformed records in {}: {}'.format(filename, reader.line_num), file=sys.stderr)
continue
# do stuff with this record, knowing it has exactly two fields:
fname = record[0]
lname = record[1]
# etc ...
except csv.Error as e:
print('Error handling {} at line {}: {}'.format(filename, reader.line_num, e), file=sys.stderr)
请注意,您的错误可能不在csv
模块中。它对格式不正确的线条非常宽容。但是我展示了如何在异常处理中包装阅读器和处理代码。您的错误可能是一个索引器错误
(试图访问超过列表中项数的项…超出其有效索引范围。最好只检查每条记录的长度,而不是对此使用异常处理…尽管这两种方法都有可能
标准库的文档中有一个非常合理的示例(非常类似的代码):
另外,在风格上,我建议使用命名的元组或轻量级类(使用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
)来管理这些记录。这将允许您使用点表示法来访问每个记录的.fname
和.lname
,而不是使用[x]
和数字索引。(随着代码复杂性的增加,数字索引越来越麻烦,也越来越容易出错).我不太明白您的意思,但如果我不得不猜测,如果抛出错误,您希望继续循环,而不是重新启动整个函数。为什么不将try/except放在while循环中?您应该在while
循环中捕获异常,然后continue
,而不是ca再次调用该函数。如果您像当前一样不断递归,将导致堆栈溢出。我将尝试植入此解决方案。感谢您的贡献,请单击答案旁边的复选标记,如果它回答了您的问题,请进行投票。如果您在实现该解决方案时需要更多帮助,请在此处进行评论。