Выполнить Python файлы из основного файла и прекратить работу, если утверждение не выполняется ни в одном из файлов - PullRequest
0 голосов
/ 20 февраля 2020

Я хочу запустить несколько Python файлов из основного файла. Я делаю это, используя следующую пользовательскую функцию в my_module:

import os

def run(file):
    os.system(f"python3 -m folder.subfolder.{file}")

В основном файле, который у меня есть:

from folder.my_module import run

run("first_file")
run("second_file")

Внутри first_file и second_file Я написал несколько утверждений. second_file не должен запускаться, пока не будут выполнены все утверждения без сообщения об ошибке в first_file.

В общем, Я бы хотел, чтобы вся программа остановилась когда происходит ошибка в любом из файлов.

Я пытался:

assert run("first_file"), "Error in file 1"
assert run("second_file"), "Error in file 2"

Но программа перестает работать всегда после запуска первого файла, независимо от возникновения исключения или нет.

Я также пробовал:

try:
    run("first_file")
except:
    raise

try:
    run("second_file")
except:
    raise

Но это не имеет никакого эффекта: second_file запускается, даже если в first_file.

не было подтверждения.

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Здесь утверждение всегда будет ошибочным, поскольку run возвращает None, что в свою очередь оценивается как False.

Простое исправление:

def run(file):
    os.system(f"python3 -m folder.subfolder.{file}")
    return True

РЕДАКТИРОВАТЬ

Мне пришлось дважды проверить модуль os. os.system вернет код выхода программы, которую вы запускаете, так что вы должны сравнить ее с 0 (нормальное состояние выхода без ошибок), например:

def run(file):
    return 0 == os.system(f"python3 -m folder.subfolder.{file}")
0 голосов
/ 20 февраля 2020

Команда os.system(f"python3 -m folder.subfolder.{file}") возвратит код завершения предоставленной команды. Так уж получилось, что программа Python, заканчивающаяся ошибкой AssertionError, будет иметь код выхода 2 (на linux, где-то может быть иначе), хотя на самом деле любой ненулевой код означает ошибку.

Вы можете проверить это самостоятельно в командной строке:

$ python3 -c "assert True"
$ echo $?
0
$ python3 -c "assert False"
$ echo $?
2

Просто проверьте возвращаемое значение вашего os.system() вызова.

...