Эта программа проверяет молекулярные формулы. Я хочу, чтобы программа завершала работу, как только обнаружит ошибку в формуле. Например, формула «а» неверна. Когда я запускаю его через свой код:
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())
, так почему же он все еще выполняется? Я хочу, чтобы печаталась только первая строка вывода.
print(...)
стоит передsys,exit()
в вашем коде. - person   schedule 20.04.2015except:
обычно плохая идея… - person abarnert   schedule 20.04.2015sys.exit
был вызван после печати первого сообщения, но второе сообщение все еще было напечатано. - person interjay   schedule 20.04.2015return
послеsys.exit()
? Что вы надеялись, что это сделает? Я знаю, что в CLC-Intercal вы можете ВОЗДЕРЖАТЬСЯ ОТ СДАЧИ, В ТО ВРЕМЯ СДАВАЯСЬ, чтобы эмулировать квантовые вычисления, но я не думаю, что это работает в Python… - person abarnert   schedule 20.04.2015