Python sys.exit()在捕获异常时不退出程序
这个程序检查分子式。我希望程序在检测到公式中的错误后立即退出。例如,公式“a”是不正确的。 当我运行代码时:Python sys.exit()在捕获异常时不退出程序,python,exit,sys,Python,Exit,Sys,这个程序检查分子式。我希望程序在检测到公式中的错误后立即退出。例如,公式“a”是不正确的。 当我运行代码时: def readletter(): if q.peek() in string.ascii_lowercase: print(q.peek()) return q.get() else: raise Formelfel("Förväntad liten bokstav.") def readLetter(): if
def readletter():
if q.peek() in string.ascii_lowercase:
print(q.peek())
return q.get()
else:
raise Formelfel("Förväntad liten bokstav.")
def readLetter():
if q.peek() in string.ascii_uppercase:
print(q.peek())
return q.get()
else:
raise Formelfel("Förväntad stor bokstav.")
def readAtom():
X = ""
try:
X += readLetter()
except Formelfel:
print("Missing capital letter at end of row "+getRest())
sys.exit()
return
try:
x = readletter()
atom = X+x
except (Formelfel, TypeError):
atom = X
if atom in ATOMER:
return
else:
raise Formelfel("Okänd atom.")
def readGroup():
if q.peek() in string.ascii_uppercase or q.peek() in string.ascii_lowercase:
try:
readAtom()
except:
print("Unknown atom at end of row "+getRest())
sys.exit()
我得到这个输出:
Missing capital letter and end of row a
Unknown atom at end of row
为什么会这样?我在打印之前调用了
sys.exit()
(“行末尾的未知原子”+getRest())那么为什么它仍然执行?我只希望打印输出的第一行。因为在python中,退出事件作为SystemExit
异常处理。sys.exit
引发SystemExit
异常。您正在使用except
子句捕获它
您应该做的是捕获一个更具体的异常类,它不包括SystemExit
捕捉异常
将起作用:
def readGroup():
if q.peek() in string.ascii_uppercase or q.peek() in string.ascii_lowercase:
try:
readAtom()
except Exception:
print("Unknown atom at end of row "+getRest())
sys.exit()
您可以了解有关异常和SystemExit
的更多信息
请注意,理想情况下,您应该捕获比
异常
更具体的内容(它非常广泛,并且可能捕获您不打算捕获的异常) 不,你没有<代码>打印(…)在您的代码中位于sys,exit()
之前。这就是为什么除外:
通常是个坏主意…@Tichodroma他的意思是sys.exit
在打印第一条消息后被调用,但第二条消息仍然被打印。顺便问一下,为什么在sys.exit()
之后返回?你希望那能做什么?我知道,在CLC Intercal中,你可以“在仍然放弃的时候不要放弃”来模拟量子计算,但我认为这在Python中不起作用……太棒了!除了Formelfel,我写了,它解决了我的问题,谢谢!