该程序检查分子式。我希望程序在检测到公式中的错误时立即退出。例如,公式" 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 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()
之前打电话给print("Unknown atom at end of row "+getRest())
,为什么它仍然执行?我只想打印输出的第一行。
答案 0 :(得分:9)
sys.exit
引发SystemExit
例外。您正在使用except
子句来捕获它。
您应该做的是捕获更具体的异常类,其中不包括SystemExit
。
捕获Exception
将起作用:
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
in the docs。
请注意,理想情况下,您应该捕获比Exception
更具体的内容(这是非常广泛的,并且可能会捕获您不打算捕获的异常)。
答案 1 :(得分:1)
因为在python中,exit事件被处理为SystemExit
exception