该程序检查分子式.我希望程序在检测到公式中的错误时立即退出.例如,公式"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()
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
Missing capital letter and end of row a
Unknown atom at end of row
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我sys.exit()之前打过电话,print("Unknown atom at end of row "+getRest())为什么它仍然执行?我只想打印输出的第一行.
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()
Run Code Online (Sandbox Code Playgroud)
您可以SystemExit 在文档中了解有关异常的更多信息.
请注意,理想情况下,您应该捕获更具体的内容Exception(非常广泛,并且可能会捕获您不打算捕获的异常).
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |