Согласно документам, gdal.Translate должен принять три аргумента. Приведенный ниже фрагмент кода копируется непосредственно из файла определения gdal.py

 def Translate(destName, srcDS, **kwargs):

Мой вызов функции выглядит так:

 gdal.Translate(tileName, rasterfile, options)

Моя IDE (VScode) мгновенно замечает, что что-то не так, и говорит, что слишком много аргументов дано. Запуск кода приводит к следующему сообщению об ошибке:

Traceback (последний вызов был последним): файл "c: /Users/parejo/Desktop/tile_gen.py", строка 24, в gdal.Translate (tileName, rasterfile, options) TypeError: Translate () принимает 2 позиционных аргумента, но 3 были данный

Чего мне здесь не хватает?

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

0
jdoe 9 Июл 2019 в 13:32

3 ответа

Лучший ответ

Попробуйте позвонить с этим (не проверял код)

gdal.Translate(tileName, rasterfile, *options)
0
Wonka 9 Июл 2019 в 10:35
def Translate(destName, srcDS, **kwargs):

Означает, что функция принимает переменное число аргументов ключевых слов, что он может интерпретировать на досуге.

Если у вас есть диктат, например

options = {"something": true}

Или что-то более динамически генерируемое, и вы хотите передать его, вы можете распаковать его в аргументы ключевого слова с тем же синтаксисом ** при вызове функции:

gdal.Translate(tileName, rasterfile, **options)

Когда вам не нужно динамически корректировать аргументы ключевых слов, более Pythonic просто передает их:

gdal.Translate(tileName, rasterfile, something=True)
1
AKX 9 Июл 2019 в 10:42

Примерно так должно работать:

options = {
    'destName': tileName,
    'srcDS': rasterfile,
    # kwargs options
}
gdal.Translate(**options)
0
Zach Thompson 9 Июл 2019 в 11:12