Сообщить об ошибке.

Выполнение модуля как скрипта.

Любой файл с расширением .py, содержащий модуль, по сути, также является скриптом Python, и нет никаких причин, по которым он не может быть выполнен.
Файл md.py:
a = [100, 200, 300]

def fib(n):
    """печатает ряд Фибоначчи до n"""
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

class Foo:
    pass
Этот файл можно выполнить как сценарий:
$ python3 md.py
$
В файле md.py только определяются объекты и по этому выполнение файла не генерирует никакого результата. Изменим модуль md.py, так что-бы запуск генерировал какие то результаты:
a = [100, 200, 300]

def fib(n):
    """печатает ряд Фибоначчи до n"""
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

class Foo:
    pass

print(a)
fib(500)
Запустим скрипт еще раз. Теперь он выведет результат.
$ python3 md.py
# [100, 200, 300]
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
$
Попробуем импортировать измененный модуль md.py. Теперь он также генерирует выходные данные при импорте в виде модуля:
>>> import md
# [100, 200, 300]
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Обычно модуль не генерирует выходные данные при импорте. Было-бы неплохо, если можно было различать, когда файл загружается как модуль и когда он запускается как автономный скрипт?
Когда файл .py импортируется как модуль, Python устанавливает специальную переменную __name__ в имя модуля. Однако, если скрипт выполняется как автономный сценарий, __name__ устанавливается в строку __main__. Используя этот факт, можно определить соответствующее поведение:
a = [100, 200, 300]

def fib(n):
    """печатает ряд Фибоначчи до n"""
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

class Foo:
    pass

if  __name__  ==  '__main__':
    print(a)
    fib(500)
Теперь, если запустить md.py как скрипт, то получите вывод, но при импорте файла md.py как модуля, вывода никакого не будет.
>>> import md
>>> md.fib(500)
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Модули часто разрабатываются с возможностью запуска в качестве отдельного сценария для тестирования функциональности, содержащейся в модуле. Это называется модульным тестированием.
Изменим блок кода в условии if __name__ == '__main__':, модуля md.py следующим образом:
...
...
...
if __name__ == '__main__':
    import sys
    if len(sys.argv) > 1:
        fib(int(sys.argv[1]))
Файл md.py может быть обработан как модуль с импортированной функцией fib():
>>> from md import fib
>>> fib(500)
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Но он также может быть запущен как автономный файл, передавая целочисленный аргумент в командной строке для тестирования:
$ python3 md.py 500
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
$