Длина аргументов цикла Python и сохранение всех строк в одной переменной - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь сделать мой первый скрипт Python для Discord Webhook, чтобы сделать его коротким, скрипт C # передает аргументы скрипту Python (длина аргументов является переменной), и мне нужно объединить все аргументы в одну переменную .

import sys 
from discord_webhook import DiscordWebhook, DiscordEmbed

argv_len = len(sys.argv)

for x in range(2, argv_len):
    message += sys.argv[x]

Я получаю ошибку: NameError: имя 'message' не определено

Я ожидаю, что все аргументы будут сохранены в одной переменной с именем "message"

Ответы [ 3 ]

1 голос
/ 10 июля 2019

Вы должны инициализировать message, прежде чем ссылаться на него. То есть python не знает, о чем вы говорите, из-за того, как работает оператор +=. Операторы += ожидают, что они конкатонируют два уже существующих списка. Однако без определения сначала пустого списка существует только один список.

Как только это будет реализовано, ваш код должен выглядеть примерно так:

import sys 
from discord_webhook import DiscordWebhook, DiscordEmbed

argv_len = len(sys.argv)

message = []
for x in range(2, argv_len):
    message += sys.argv[x]

Кроме того, более простой способ сделать это - нарезка . Это отрежет первые два аргумента и оставит остальные в массиве. (Авторы @furas за упоминание этого). Это могло бы быть следующим:

import sys 
from discord_webhook import DiscordWebhook, DiscordEmbed

message = sys.argv[2:]

Это берет элементы, начинающиеся после первых двух, вплоть до конца списка. (Начинается с index 2 включительно и идет до конца списка включительно)

0 голосов
/ 10 июля 2019

Вам необходимо объявить переменное сообщение перед началом цикла for.

0 голосов
/ 10 июля 2019

Вам просто нужно объявить переменную вне цикла for, чтобы получить доступ к ней вне цикла после работы с циклом for, поскольку переменные имеют только лексическую область видимости.

argv_len = len(sys.argv)
message = ''
for x in range(2, argv_len):
    message += sys.argv[x]
print(message)
...