sys.exit() 捕获异常时不退出程序
sys.exit() does not exit program when catching exceptions
此程序检查分子式。我希望程序在检测到公式错误后立即退出。例如,公式 "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
这是为什么?我在 print("Unknown atom at end of row "+getRest())
之前调用了 sys.exit()
为什么它仍然执行?我只想打印输出的第一行。
因为在 python 中退出事件被处理为 SystemExit
异常
sys.exit
引发 SystemExit
异常。您正在使用 except
子句捕获它。
您应该做的是捕获更具体的 class 个异常,其中不包括 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
更具体的内容(它非常广泛,可能会捕获您不打算捕获的异常)。
此程序检查分子式。我希望程序在检测到公式错误后立即退出。例如,公式 "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
这是为什么?我在 print("Unknown atom at end of row "+getRest())
之前调用了 sys.exit()
为什么它仍然执行?我只想打印输出的第一行。
因为在 python 中退出事件被处理为 SystemExit
异常
sys.exit
引发 SystemExit
异常。您正在使用 except
子句捕获它。
您应该做的是捕获更具体的 class 个异常,其中不包括 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
更具体的内容(它非常广泛,可能会捕获您不打算捕获的异常)。