Кажется, что существует путаница относительно того, как код Python может быть выполнен и обработан.
- С одной стороны, в интерактивном режиме есть интерпретатор Python. Обычно это начинается с команды
python
(без аргументов), и тогда у вас есть возможность выполнить код Python непосредственно в интерактивной оболочке Python Speci c. Это отличает Python от других языков, которые должны быть скомпилированы в первую очередь для выполнения кода. Дополнительная информация доступна в официальном учебнике Python . - С другой стороны, Python также может быть выполнен таким образом, что не запускается интерпретатор с интерактивной оболочкой , но файл читается и обрабатывается. Обычно это делается с помощью команды
python
вместе с путем к файлу Python в качестве аргумента, например, python test.py
. См. Также документацию по использованию Python.
С этим знанием проблемы, с которыми вы столкнулись, теперь можно объяснить и решить:
Если вы просто запускаете интерпретатор Python в интерактивном режиме (без каких-либо дополнительных аргументов), у вас больше нет доступа к аргументам командной строки, например:
$ python3.8 # or whatever your command is, maybe only python or python3
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys; sys.argv
['']
Как видите, там не совсем полезная информация в argv
. И это ваша проблема: аргументы не были успешно загружены в sys.argv
. Итак, произошла ошибка индекса, потому что аргументы просто отсутствуют:
$ python3.8
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.argv[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Единственное отличие вашего примера в том, что вы уже указали путь к сценарию, потому что он File "C:/Users/MJavad/Desktop/test.py", line 3, in <module>
вместо File "<stdin>", line 1, in <module>
, Итак, вы запустили программу через python test.py
, но также без каких-либо дополнительных аргументов, которые будут загружены в sys.argv
в программе, см .:
$ python3.8 test.py
Traceback (most recent call last):
File "test.py", line 3, in <module>
b = float(sys.argv[1])
IndexError: list index out of range
Ваш sys.argv
теперь выглядит следующим образом: ['test.py']
, но все еще нет доступных позиций индекса 1 и 2. Поэтому вы должны вызвать python также с дополнительными аргументами, которые будут переданы в sys.argv
:
$ python3.8 test.py 1 2
Traceback (most recent call last):
File "test.py", line 6, in <module>
d = math.sqrt(f)
ValueError: math domain error
И это сработало! Хорошо, у вас есть еще одно исключение, но оно в строке 6, и каждая строка ранее была успешно обработана, а также аргументы командной строки. Теперь вы можете приступить к отладке вашей программы, то есть начать программирование или попробовать другие параметры, кроме 1
и 2
et c.
Так что это теория. Так как вы также используете PyCharm и имеете «Терминал», «Запуск конфигурации» и «Python Консоль», все становится немного сложнее:
- «Терминал» должен иметь приглашение, если вы начинаете. Это приглашение не должно быть запросом интерпретатора Python (обычно с префиксом
>>>
). Это должен быть запрос терминала (обычно с префиксом $
в конце), где вы также можете запустить интерпретатор python в интерактивном режиме или запустить программу python, как описано выше. Этот «Терминал» является эмулятором терминала, предоставленным вам PyCharm, и может также делать для вас другие вещи, не только запуск программ python. См. PyCharm документацию для получения дополнительной информации. - "Python Console" - это аналог Python интерпретатора, который вы также можете получить, запустив
python
из "Терминала". Но затем вы уже запустили интерактивный режим интерпретатора, и нет возможности передавать аргументы командной строки (возможно где-то, но не по умолчанию). Для получения дополнительной информации см. Документацию PyCharm . Если вы используете IDE, например PyCharm, вы должны обычно запускать программу в соответствии с рекомендациями IDE. В этом случае вы пишете файл и запускаете его не запуская «Терминал» и не переходя в интерактивную оболочку Python. Вместо этого вы должны настроить IDE «Запуск», как описано в документации PyCharm или как вы можете видеть здесь:
Это просто GUI способ вызова python C:/Users/MJavad/Desktop/test.py 1 2
непосредственно внутри PyCharm.
Поэтому я бы порекомендовал запускать ваши программы только через опцию 3 (через конфигурацию «Выполнить» или «Отладка»). конфигурация). Вам нужно только обратить внимание, запустив правильную конфигурацию (посмотрите, правильный ли путь и правильные ли параметры).
Нормально иметь приглашение Python (>>>
) напрямую после запуска "Терминала", правда. А в интерактивном режиме интерпретатора Python вы просто не можете запустить сценарий python, потому что вы уже используете интерпретатор python, например:
$ python3.8
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> python test.py 1 2
File "<stdin>", line 1
python test.py 1 2
^
SyntaxError: invalid syntax
Я должен также упомянуть что вы можете передавать аргументы в python интерактивный режим, например (-
означает <stdin>
):
$ python3.8 - hello world
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys; sys.argv
['-', 'hello', 'world']
>>>