Изучение Python и проблемы с первой программой

#python

#python

Вопрос:

Я написал этот код, и он завершается ошибкой в строке 11 команды «target_dir» с недопустимым синтаксисом. У меня есть виртуальная машина Ubuntu, и я просто скопировал и вставил код, и он работал там, но не в моем win7, и я не уверен, почему. Я читал другой вопрос с похожим кодом, но в нем была другая ошибка, и заметил, что кто-то сказал, что некоторые из этих команд устарели, поэтому мне просто интересно, так ли это, и я бы просто бросил эту книгу и перешел к другой, которую я только что получил.

Заранее спасибо за помощь,

 # Filename: backup_ver1.py

import os
import time

# 1. The files and directories to be backed up are specified in a list.
source = ['"D:\Warlock"', 'C:\Druid'
# Notice we had to use double quotes inside the string for names with spaces in it.

# 2. The backup must be stored in a main backup directory
target_dir = r'C:Backup' # Remember to change this to what you will be using


# 3. The files are backed up into zip file.
# 4. The name of the zip archive is the current date and time
target = target_dir   os.sep   time.strftime('%Y%m%d%H%M%S')   '.zip'

# 5. We use the zip commnad to put the files in a zip archive
zip_commnad = "7z a -tzip {0} {1}" .format(target, ' '.join(source))
    print(zip_command)

#Run the backup
if os.system(zip_command) == 0:
    print('Successful backup', target)
else:
    print('Backup FAILED')
  

Ответ №1:

source = ['"D:\Warlock"', 'C:\Druid' отсутствует конечная скобка. Должно быть source = ['"D:\Warlock"', 'C:\Druid'] .

Редактировать: Также,

 zip_commnad = "7z a -tzip {0} {1}" .format(target, ' '.join(source))
    print(zip_command)
  

должно быть

 zip_command = "7z a -tzip {0} {1}" .format(target, ' '.join(source))
print(zip_command)
  

т.е. правильно напишите команду и исправьте отступ. Кроме того, хотя определение путей резервного копирования таким образом, как вы, не является ошибкой, я бы согласился с комментарием abaumg о том, что использование необработанных строк было бы намного понятнее.

Комментарии:

1. Для лучшей читаемости я бы предложил source = [r'D:Warlock', r'C:Druid']

2. @abaumg: Я думал, вы могли бы просто использовать косые черты, даже в Microsoft.

3. спасибо за помощь, ребята, я не могу поверить, что пропустил скобку, я всегда просматриваю свой код примерно 3 раза в поисках этих ошибок : (.

4. Извините, Блэр, первый пользователь сайта, который не понял, что это был вариант. Хотя сейчас я принял это. Еще раз спасибо. 🙂

Ответ №2:

В Python недопустимая синтаксическая ошибка часто означает, что имеется синтаксическая ошибка, на одну или несколько строк выше номера строки, о которой сообщается.

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

Кроме того, вы, возможно, захотите взглянуть на операционную систему.путь к модулю и избавьтесь от C: и из ваших имен файлов. Можно сделать код Python переносимым между Linux и Windows. Имена дисков могут быть взяты из опций (sys.argv) или конфигурационного файла (ConfigParser), а может быть заменен одним /, а затем вы можете использовать os.path.normcase(), чтобы нормализовать его для текущей ОС.

Комментарии:

1. 1 для: «В Python недопустимая синтаксическая ошибка часто означает, что существует синтаксическая ошибка»