Как разрешить файл "<input>", строка 1 syntaxerror: неверный синтаксис? - PullRequest
1 голос
/ 02 апреля 2020

Я новичок в Python. Я пытался устранить эту ошибку, но не смог. Этот код работал раньше, но не больше. Я запускаю код в PyCharm и получаю эту ошибку:

Traceback (most recent call last):
File "C:/Users/MJavad/Desktop/test.py", line 3, in <module>
b = float(sys.argv[1])
IndexError: list index out of range

Я запустил CMD, а также была ошибка:

File "<stdin>", line 1
    python test.py 1 2
           ^
SyntaxError: invalid syntax

Может кто-нибудь помочь, пожалуйста? Это мой код:

import sys
import math
b = float(sys.argv[1])
c = float(sys.argv[2])
f = b * b - 4.0 * c
d = math.sqrt(f)
print((-b + d) / 2.0)
print((-b - d) / 2.0)

, а это код и ошибка в PyCharm: enter image description here

1 Ответ

0 голосов
/ 02 апреля 2020

Кажется, что существует путаница относительно того, как код Python может быть выполнен и обработан.

  1. С одной стороны, в интерактивном режиме есть интерпретатор Python. Обычно это начинается с команды python (без аргументов), и тогда у вас есть возможность выполнить код Python непосредственно в интерактивной оболочке Python Speci c. Это отличает Python от других языков, которые должны быть скомпилированы в первую очередь для выполнения кода. Дополнительная информация доступна в официальном учебнике Python .
  2. С другой стороны, 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 Консоль», все становится немного сложнее:

  1. «Терминал» должен иметь приглашение, если вы начинаете. Это приглашение не должно быть запросом интерпретатора Python (обычно с префиксом >>>). Это должен быть запрос терминала (обычно с префиксом $ в конце), где вы также можете запустить интерпретатор python в интерактивном режиме или запустить программу python, как описано выше. Этот «Терминал» является эмулятором терминала, предоставленным вам PyCharm, и может также делать для вас другие вещи, не только запуск программ python. См. PyCharm документацию для получения дополнительной информации.
  2. "Python Console" - это аналог Python интерпретатора, который вы также можете получить, запустив python из "Терминала". Но затем вы уже запустили интерактивный режим интерпретатора, и нет возможности передавать аргументы командной строки (возможно где-то, но не по умолчанию). Для получения дополнительной информации см. Документацию PyCharm .
  3. Если вы используете IDE, например PyCharm, вы должны обычно запускать программу в соответствии с рекомендациями IDE. В этом случае вы пишете файл и запускаете его не запуская «Терминал» и не переходя в интерактивную оболочку Python. Вместо этого вы должны настроить IDE «Запуск», как описано в документации PyCharm или как вы можете видеть здесь:

    run configuration

    Это просто 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']
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...