我正在尝试打开一个Excel文件,并根据名称(标题)获取各列。如果找不到这些标题,我希望脚本停止并显示一条消息,提示找不到该列。
我首先将当前编号分配给具有这些名称的列,然后在标题中搜索名称,以确保之间没有插入任何列,这会改变列编号。如果数字不同,它将使用名称所在的任何列号。
我一直试图在“ else
”下放置“ elif
”,并要求其打印错误,然后我将“ break
”放置在其中。问题在于,如果没有找到列名,它不会停止脚本,而只是采用默认分配。我确实知道为什么这种中断不会停止整个脚本,但是我不知道如何将其停下来。该代码比这要复杂一些,但是我希望这能对您有所了解。
我也尝试删除默认分配,但随后它说找不到“ i”,因此给我一个错误。
我非常感谢您的帮助。
代码:
colTPNumber = 2
colTDNumber = 3
rows = sheet.iter_rows(min_row=1, max_row=1)
firstRow = next(rows)
for i in firstRow:
if str(i.value) == "TP":
colTPNumber = i.column
elif str(i.value) == "TD":
colTDNumber = i.column
else:
print ("Column name not found")
break
答案 0 :(得分:0)
尝试使用exit()
代替break
。 break
结束循环,但是exit()
实际上退出了程序。
答案 1 :(得分:0)
break
退出循环,而不是整个程序。
使用exit()
或sys.exit()
(第二个选项请不要忘记import sys
)退出程序
示例:
import sys #unnessary if you're using exit() only
colTPNumber = 2
colTDNumber = 3
rows = sheet.iter_rows(min_row=1, max_row=1)
firstRow = next(rows)
for i in firstRow:
if str(i.value) == "TP":
colTPNumber = i.column
elif str(i.value) == "TD":
colTDNumber = i.column
else:
print ("Column name not found")
#break
sys.exit()
#OR
exit()
更多信息:
您也可以使用quit()
quit()
在幕后引发SystemExit异常。此外,如果您打印它,它将显示一条消息:
>>> print (quit)
Use quit() or Ctrl-Z plus Return to exit
包含此功能是为了帮助不了解Python的人。毕竟,新手尝试退出Python的最可能的事情之一就是输入quit
。
尽管如此,quit
不应在生产代码中使用。这是因为它仅在加载了网站模块后才有效。相反,此功能应仅在解释器中使用。
exit()
是quit的别名(反之亦然)。它们在一起存在只是为了使Python更加用户友好。此外,它在打印时也会发出一条消息:
>>> print (exit)
Use exit() or Ctrl-Z plus Return to exit
但是,像quit
一样,exit
被认为在生产代码中不好使用,应保留以供解释器使用。这是因为它也依赖于站点模块。
sys.exit
在后台引发SystemExit
异常。这意味着在这方面它与quit
和exit
相同。但是与这两个不同的是,sys.exit()
被认为可以在生产代码中很好地使用。这是因为sys
模块将一直存在。
os._exit
退出程序而无需调用清理处理程序,刷新stdio缓冲区等。因此,这不是退出的标准方法,仅应在特殊情况下使用。其中最常见的是os.fork
创建的子进程。请注意,在给出的四种方法中,只有一种在其功能方面是独一无二的。
总结起来,所有四个方法都退出程序。但是,前两个在生产代码中被认为不好用,最后一个是非标准的,肮脏的方式,仅在特殊情况下使用。
因此,如果要正常退出程序,请使用第三种方法:sys.exit
。
或者,我认为更好的是,您可以直接在幕后进行sys.exit
做的事情,然后运行:
raise SystemExit
这样,您无需先import sys
。
但是,这种选择只是一种选择,完全取决于您
改编自:https://www.edureka.co/community/16988/python-exit-commands-why-so-many-and-when-should-each-be-used
有关sys.exit()
的更多信息:
sys.exit([arg])
从Python退出。这是通过引发SystemExit
异常来实现的,因此可以遵循try语句的finally子句指定的清除操作,并且有可能在外部级别拦截出口尝试。
可选参数arg可以是给出退出状态的整数(默认为零),也可以是其他类型的对象。如果是整数,则shell等将零视为“成功终止”,而将任何非零值视为“异常终止”。大多数系统要求它的范围是0–127,否则会产生不确定的结果。某些系统具有为特定的退出代码分配特定含义的约定,但是这些通常不完善。 Unix程序通常将2用于命令行语法错误,将1用于所有其他类型的错误。如果传递了另一种类型的对象,则``无''等于传递零,并且将任何其他对象打印到stderr
并导致退出代码为1.特别是,sys.exit("some error message")
是退出的快速方法发生错误的程序。
由于exit()
最终“仅”引发了异常,因此只有从主线程调用时,它才会退出进程,并且不会拦截该异常。
版本3.6中的更改:如果Python解释器捕获到SystemExit
后清理过程中发生错误(例如错误清除标准流中的缓冲数据),则退出状态将更改为120。 >
答案 2 :(得分:0)
提供变量无效的默认值,以便您可以在循环后检查它们。
如果设置不正确,您可以调用exit()
,这将终止整个脚本。
colTPNumber = None
colTDNumber = None
rows = sheet.iter_rows(min_row=1, max_row=1)
firstRow = next(rows)
for i in firstRow:
if str(i.value) == "TP":
colTPNumber = i.column
elif str(i.value) == "TD":
colTDNumber = i.column
if colTPNumber is None or colTDNumber is None:
print("Column name not found")
exit(1)