Ошибка при выполнении сценария python qgis

Геоинформационные системы (ГИС) и дистанционное зондирование Земли (ДЗЗ), новости, программное обеспечение, журналы, публикации, документация, форум

artemiziy

Активный участник

Сообщения: 115
Зарегистрирован: 29 апр 2008, 11:08
Проекты: 1/1

Репутация: 7

QGIS. Ошибка при выполнении сценария Python

Всем добрый день,

При попытке настроить в QGIS «Анализ данных» — «Параметры…» возникает следующее сообщение:

Код: Выделить всё

Ошибка при выполнении сценария Python: 

TypeError: function takes exactly 5 arguments (1 given) 
Traceback (most recent call last):
  File "C:/OSGEO4~1/apps/qgis/./python/pluginsprocessingguiConfigDialog.py", line 150, in accept
    self.tr('Wrong value for parameter "%s":nn%s' % (setting.description, unicode(e))))
TypeError: function takes exactly 5 arguments (1 given)


Версия Python: 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] 
Версия: 2.14.1-Essen Essen, ea85bef 

Расположение Python:
C:/OSGEO4~1/apps/qgis/./python/pluginsprocessing
C:/OSGEO4~1/apps/qgis/./python
C:/Users/nikartem/.qgis2/python
C:/Users/nikartem/.qgis2/python/plugins
C:/OSGEO4~1/apps/qgis/./python/plugins
C:OSGEO4~1appsPython27libsite-packagesmatplotlib-1.3.1-py2.7-win-amd64.egg
C:OSGEO4~1appsPython27libsite-packagesnose-1.3.3-py2.7.egg
C:OSGEO4~1appsPython27libsite-packagestornado-4.0.1-py2.7-win-amd64.egg
C:OSGEO4~1appsPython27libsite-packagesbackports.ssl_match_hostname-3.4.0.2-py2.7.egg
C:OSGEO4~1appsPython27libsite-packagescertifi-14.05.14-py2.7.egg
c:osgeo4~1appspython27libsite-packagespython_dateutil-2.1-py2.7.egg
C:OSGEO4~1binpython27.zip
C:OSGEO4~1appsPython27DLLs
C:OSGEO4~1appsPython27lib
C:OSGEO4~1appsPython27libplat-win
C:OSGEO4~1appsPython27liblib-tk
C:OSGEO4~1bin
C:OSGEO4~1appsPython27
C:OSGEO4~1appsPython27libsite-packages
C:OSGEO4~1appsPython27libsite-packagesPIL
C:OSGEO4~1appsPython27libsite-packagesjinja2-2.7.2-py2.7.egg
C:OSGEO4~1appsPython27libsite-packagesmarkupsafe-0.23-py2.7-win-amd64.egg
C:OSGEO4~1appsPython27libsite-packagespytz-2012j-py2.7.egg
C:OSGEO4~1appsPython27libsite-packageswin32
C:OSGEO4~1appsPython27libsite-packageswin32lib
C:OSGEO4~1appsPython27libsite-packagesPythonwin
C:OSGEO4~1appsPython27libsite-packageswx-2.8-msw-unicode
C:/Users/nikartem/.qgis2//python
C:OSGEO4~1appsqgispythonpluginsfToolstools

Версия QGIS — 2.14.1-Essen, поставлена через OSGeo4W64

подскажите, пожалуйста, проблема в каких-то настройках?


Даниил Белый

Новоприбывший

Сообщения: 5
Зарегистрирован: 19 ноя 2015, 12:38

Репутация: 0

Re: QGIS. Ошибка при выполнении сценария Python

Сообщение

Даниил Белый » 09 фев 2018, 16:15

Такая же ошибка и у меня выпадает и при тех же обстоятельствах.


drrrrr

Участник

Сообщения: 78
Зарегистрирован: 31 янв 2012, 10:51

Репутация: 45

Re: QGIS. Ошибка при выполнении сценария Python

Сообщение

drrrrr » 09 фев 2018, 17:01

Разбирался я с этой злосчастной ошибкой, причина — фиг догадаешься — в настройках grass проверяется наличие пути %OSGEO4W_ROOT%appsmsys. Создайте эту папку руками ну или установите пакет msys.


Аватара пользователя

Denis Rykov

Гуру

Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9

Репутация: 528
Ваше звание: Author
Контактная информация:

Re: QGIS. Ошибка при выполнении сценария Python

Сообщение

Denis Rykov » 09 фев 2018, 20:52

Даниил Белый писал(а): ↑

09 фев 2018, 16:15

Такая же ошибка и у меня выпадает и при тех же обстоятельствах.

Может быть стоит обновить QGIS?

Spatial is now, more than ever, just another column- The Geometry Column.


Svettlana

Новоприбывший

Сообщения: 6
Зарегистрирован: 09 фев 2018, 10:39

Репутация: 0
Откуда: Симферополь

Re: QGIS. Ошибка при выполнении сценария Python

Сообщение

Svettlana » 12 фев 2018, 10:44

Добрый день! Помоги пожалуйста.
При Preprocessing Sentinel-2 где -то при 60% выполнения постоянно выпадает (независимо от версии QGIS или используемого компьютера):

Traceback (most recent call last):
File «C:/Users/Irina/.qgis2/python/pluginsSemiAutomaticClassificationPluginmaininterfacesentinelTab.py», line 164, in performSentinelConversion
self.sentinel2(cfg.ui.S2_label_86.text(), o)
File «C:/Users/Irina/.qgis2/python/pluginsSemiAutomaticClassificationPluginmaininterfacesentinelTab.py», line 249, in sentinel2
cfg.mx.msgErr38(outR)
File «C:/Users/Irina/.qgis2/python/pluginsSemiAutomaticClassificationPlugincoremessages.py», line 248, in msgErr38
self.msgBarError(cfg.QtGuiSCP.QApplication.translate(«semiautomaticclassificationplugin», «Error») + » [38]», cfg.QtGuiSCP.QApplication.translate(«semiautomaticclassificationplugin», «Unable to load raster » + path))
TypeError: function takes exactly 5 arguments (1 given)

Как решить эту проблему?


gamm

Гуру

Сообщения: 3814
Зарегистрирован: 15 окт 2010, 08:33

Репутация: 996
Ваше звание: программист
Откуда: Казань

Re: QGIS. Ошибка при выполнении сценария Python

Сообщение

gamm » 12 фев 2018, 11:07

запустить в отладчике, или поставить отладочную печать в том месте, где не хватает параметров. Обычно ерунда какая-нибудь, типа русских букв в путях, или отсутствия какой-нибудь папки (которых у Сентиля хватает). Или пальчиком по коду поводить в этом месте, посмотреть, какие такие 5 аргументов в функцию должны попасть.


Даниил Белый

Новоприбывший

Сообщения: 5
Зарегистрирован: 19 ноя 2015, 12:38

Репутация: 0

Re: QGIS. Ошибка при выполнении сценария Python

Сообщение

Даниил Белый » 13 фев 2018, 18:20

drrrrr:
Разбирался я с этой злосчастной ошибкой, причина — фиг догадаешься — в настройках grass проверяется наличие пути %OSGEO4W_ROOT%appsmsys. Создайте эту папку руками ну или установите пакет msys.

Это помогло! Выражаю огромную благодарность!!! :D


Svettlana

Новоприбывший

Сообщения: 6
Зарегистрирован: 09 фев 2018, 10:39

Репутация: 0
Откуда: Симферополь

Re: QGIS. Ошибка при выполнении сценария Python

Сообщение

Svettlana » 13 фев 2018, 19:46

gamm писал(а): ↑

12 фев 2018, 11:07

Обычно ерунда какая-нибудь, типа русских букв в путях

Все получилось! Огромное спасибо!


ошибка при выполнении сценария Python

Что с этим делать?

Starski777
 
Сообщения: 6
Зарегистрирован: Ср ноя 20, 2013 11:33 pm

Re: ошибка при выполнении сценария Python

Сообщение dab » Чт ноя 21, 2013 9:25 am

У вас старые версии. Обновитесь, пожалуйста.
Сейчас актуальные версии:
QGIS 2.0.1 Dufour
openLand 0.2.6 от 14.11.2013
база данных 16 от 14.11.2013

Аватара пользователя
dab
 
Сообщения: 104
Зарегистрирован: Ср мар 06, 2013 6:44 pm

Re: ошибка при выполнении сценария Python

Сообщение Starski777 » Чт ноя 21, 2013 8:51 pm

Спасибо большое. теперь такая проблема: Настройка базы данных, создаю базовый проект через меню модуля openLand «Кадастр» / «Настройки» / «Данные» . По предложенному образцу из документа

http://openlandgis.ru/repository/Admin_Guide.pdf

заполняю закладку «Данные» и перезагружаю QGIS. Открываю новый созданный проект и получается ошибка. см. ниже. Получается я не правильно заполнила Данные. Что надо писать мне? помогите пожалуйста

Starski777
 
Сообщения: 6
Зарегистрирован: Ср ноя 20, 2013 11:33 pm

Re: ошибка при выполнении сценария Python

Сообщение dab » Чт ноя 21, 2013 9:17 pm

Это не образец. Это всего лишь пример заполнения данных.

1. У Вас установлен сервер базы данных PostresSQL + PostGIS?
2. Вы создали базу данных по скриптам со страницы

http://openlandgis.ru/download

?
3. Для базы данных создали пользователя с паролем?

Если ответ «да» на все вопросы — тогда указывайте соответствующие имя пользователя и пароль, а не «sampleUserName» и «samplePass»

Если установка сервера БД и настройка вызывают затруднения — напишите мне на

biryuchkov@gmail.com

Думаю сможем решить все проблемы. :)

Аватара пользователя
dab
 
Сообщения: 104
Зарегистрирован: Ср мар 06, 2013 6:44 pm

Re: ошибка при выполнении сценария Python

Сообщение Starski777 » Чт ноя 21, 2013 9:21 pm

Спасибо. Все еще раз посмотрю и думаю что напишу еще Вам. Просто я самоучка в этой программе, решила попробывать межевой план участка сделать. Вот пытаюсь

Starski777
 
Сообщения: 6
Зарегистрирован: Ср ноя 20, 2013 11:33 pm

Re: ошибка при выполнении сценария Python

Сообщение dab » Чт ноя 21, 2013 9:41 pm

Признаю, что система довольно сложная при установке и настройке. Поэтому готов всячески содействовать и помогать в этом. И денег не прошу :)
Только поймите меня правильно — мне проще на 40 минут через интернет подключиться к вашему компьютеру и всё установить и настроить самому, чем мы будем несколько дней вести оживленную переписку и обсуждать PostgreSQL, PostGIS, процедуры выполнения скриптов, особенности вашей операционной системы и т.д. и т.п.

Аватара пользователя
dab
 
Сообщения: 104
Зарегистрирован: Ср мар 06, 2013 6:44 pm


Вернуться в Администрирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Author Name: Andrew Shanin (Andrew Shanin)
Original Redmine Issue: 21402
Affected QGIS version: 3.6.0
Redmine category:gui


Ошибка при выполнении сценария Python:

RuntimeError: wrapped C/C++ object of type ContourGeneratorAlgorithm has been deleted
Traceback (most recent call last):
File «C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python/pluginscontourContourGeneratorProvider.py», line 55, in loadAlgorithms
self.addAlgorithm( alg )
RuntimeError: wrapped C/C++ object of type ContourGeneratorAlgorithm has been deleted

Версия Python: 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]
Версия: 3.6.0-Noosa Noosa, 5873452

Расположение Python:
C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python/pluginscontour
L:/qgis-3.6/apps/qgis/./python
C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python
C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python/plugins
L:/qgis-3.6/apps/qgis/./python/plugins
L:qgis-3.6binpython37.zip
L:qgis-3.6appsPython37DLLs
L:qgis-3.6appsPython37lib
L:qgis-3.6bin
L:qgis-3.6appsPython37
L:qgis-3.6appsPython37libsite-packages
L:qgis-3.6appsPython37libsite-packageswin32
L:qgis-3.6appsPython37libsite-packageswin32lib
L:qgis-3.6appsPython37libsite-packagesPythonwin
C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python
C:UsersАндрейAppDataRoamingQGISQGIS3profilesdefaultpythonpluginsBeeline/libs
C:UsersАндрейAppDataRoamingQGISQGIS3profilesdefaultpythonplugins
C:UsersАндрейAppDataRoamingQGISQGIS3profilesdefaultpythonpluginsshapetoolsext-libs

Every time I run a python script from the script editor in QGIS 2.18.3 I get this error message

enter image description here

After I click on «close program» the script continues like there was no error message. In total, I get a few of them, more or less one for every step of the code. The thing is that this is not a «really» error message because the code continues to run normally after I click on «close program» until the code finishes, and there is nothing wrong with the outputs of the code. The only annoying thing is that I can’t «leave» the code to run by itself and I need to monitor it in order to click every time on «close program» so that the code will continue.
Does somebody had the same issue?

an example code is the following. Is it iterate over folders and does some calculation on landsat band 10. Every time it produce a new file (output) I get the error message.

##calibrate landsat bands v8=name
##Select_directory=Folder

import glob, os, os.path, math
import glob, os, os.path, math
from PyQt4.QtCore import QFileInfo
from qgis.core import QgsRasterLayer, QgsRectangle
#Select_directory = r"C:UsersRanDesktopMannacalibrate LS8testing iterating"
x = "SUN_ELEVATION"
wrs_path = "WRS_PATH"
wrs_row = "WRS_ROW"
date_of_image ="DATE_ACQUIRED"  
#create a list of the directories in the folder
folder_list=[name for name in os.listdir(Select_directory) if os.path.isdir(os.path.join(Select_directory, name))] #list the folder names
if len(folder_list) > 0:
    a=0

    for folder in folder_list: #folder= name of a folder with only files
        folderpath = os.path.join(Select_directory,folder_list[a]) #the path to a specific folder
        a+=1
        os.chdir(folderpath)
        name_list=[] #list of file names
        for raster in glob.glob("*.tif"): #raster = tif files in specific folder
            name_list.append(raster[:21])   

        unique = set(name_list)   #get only unique values

        for c in unique: #c= unique name of landsat image (include all bands)
            for b in os.listdir(folderpath): #b= file name in a specific folder
                if (c+"_MTL") in b:
                    i = os.path.join(folderpath,b) #this expression :[source+"\"+folder] is a path to a folder that has rasters
                    z = open(i,'r')             

                    for line, text in enumerate(z):  
                        if x in text:                
                            y = text.split("=")
                            SUN_ELEVATION = (y[1])


                        elif wrs_path in text:
                            yy = text.split("=")
                            WRS_PATH = yy[1]
                            path_temp = WRS_PATH.strip()
                            WRS_PATH1 = path_temp.replace(" ","")           
                            if len(WRS_PATH1)==2: 
                                WRS_PATH1 = "0"+WRS_PATH1

                        elif wrs_row in text:   
                            yyy = text.split("=")
                            WRS_ROW = yyy[1]
                            row_temp = WRS_ROW.strip()
                            WRS_ROW1 = row_temp.replace(" ","")
                            if len(WRS_ROW1)==2: #this is to check if the row is 2 or 3 digits
                                WRS_ROW1 = "0"+WRS_ROW1

                        elif date_of_image in text:
                            yyyy = text.split("=")
                            yyyyy = yyyy[1].split("-")
                            day = yyyyy[2]
                            month = yyyyy[1]
                            year = yyyyy[0][-2:]
                            DATE_ACQUIRED = year+month+day  


            image_suffix = "ls8_{}{}_{}".format(WRS_PATH1,WRS_ROW1,DATE_ACQUIRED)
            SUN_ELEVATION = float(y[1])
            SUN_ELEVATION1 = math.radians(SUN_ELEVATION)
            syntax = '(A>0.001)*10000*(A*0.00002-0.1)/sin('+str(SUN_ELEVATION1)+')'
            os.chdir(folderpath)

            for raster in glob.glob("*.tif"):
                if raster[:25]==c+"_B10":
                    outputName = os.path.join(folderpath,"cal_"+c+"_B10") 
                    fileInfo = QFileInfo(raster)
                    baseName = fileInfo.baseName()
                    rlayer = QgsRasterLayer(raster, baseName)
                    outputs_GDALOGRRASTERCALCULATOR_1=processing.runalg('gdalogr:rastercalculator', rlayer,'1',None,'1',None,'1',None,'1',None,'1',None,'1','(A>0)*(1000*(1321.0789/(log(774.8853/(A*0.0003342+0.1)+1))-273.15))','0',4,None,outputName)

Every time I run a python script from the script editor in QGIS 2.18.3 I get this error message

enter image description here

After I click on «close program» the script continues like there was no error message. In total, I get a few of them, more or less one for every step of the code. The thing is that this is not a «really» error message because the code continues to run normally after I click on «close program» until the code finishes, and there is nothing wrong with the outputs of the code. The only annoying thing is that I can’t «leave» the code to run by itself and I need to monitor it in order to click every time on «close program» so that the code will continue.
Does somebody had the same issue?

an example code is the following. Is it iterate over folders and does some calculation on landsat band 10. Every time it produce a new file (output) I get the error message.

##calibrate landsat bands v8=name
##Select_directory=Folder

import glob, os, os.path, math
import glob, os, os.path, math
from PyQt4.QtCore import QFileInfo
from qgis.core import QgsRasterLayer, QgsRectangle
#Select_directory = r"C:UsersRanDesktopMannacalibrate LS8testing iterating"
x = "SUN_ELEVATION"
wrs_path = "WRS_PATH"
wrs_row = "WRS_ROW"
date_of_image ="DATE_ACQUIRED"  
#create a list of the directories in the folder
folder_list=[name for name in os.listdir(Select_directory) if os.path.isdir(os.path.join(Select_directory, name))] #list the folder names
if len(folder_list) > 0:
    a=0

    for folder in folder_list: #folder= name of a folder with only files
        folderpath = os.path.join(Select_directory,folder_list[a]) #the path to a specific folder
        a+=1
        os.chdir(folderpath)
        name_list=[] #list of file names
        for raster in glob.glob("*.tif"): #raster = tif files in specific folder
            name_list.append(raster[:21])   

        unique = set(name_list)   #get only unique values

        for c in unique: #c= unique name of landsat image (include all bands)
            for b in os.listdir(folderpath): #b= file name in a specific folder
                if (c+"_MTL") in b:
                    i = os.path.join(folderpath,b) #this expression :[source+"\"+folder] is a path to a folder that has rasters
                    z = open(i,'r')             

                    for line, text in enumerate(z):  
                        if x in text:                
                            y = text.split("=")
                            SUN_ELEVATION = (y[1])


                        elif wrs_path in text:
                            yy = text.split("=")
                            WRS_PATH = yy[1]
                            path_temp = WRS_PATH.strip()
                            WRS_PATH1 = path_temp.replace(" ","")           
                            if len(WRS_PATH1)==2: 
                                WRS_PATH1 = "0"+WRS_PATH1

                        elif wrs_row in text:   
                            yyy = text.split("=")
                            WRS_ROW = yyy[1]
                            row_temp = WRS_ROW.strip()
                            WRS_ROW1 = row_temp.replace(" ","")
                            if len(WRS_ROW1)==2: #this is to check if the row is 2 or 3 digits
                                WRS_ROW1 = "0"+WRS_ROW1

                        elif date_of_image in text:
                            yyyy = text.split("=")
                            yyyyy = yyyy[1].split("-")
                            day = yyyyy[2]
                            month = yyyyy[1]
                            year = yyyyy[0][-2:]
                            DATE_ACQUIRED = year+month+day  


            image_suffix = "ls8_{}{}_{}".format(WRS_PATH1,WRS_ROW1,DATE_ACQUIRED)
            SUN_ELEVATION = float(y[1])
            SUN_ELEVATION1 = math.radians(SUN_ELEVATION)
            syntax = '(A>0.001)*10000*(A*0.00002-0.1)/sin('+str(SUN_ELEVATION1)+')'
            os.chdir(folderpath)

            for raster in glob.glob("*.tif"):
                if raster[:25]==c+"_B10":
                    outputName = os.path.join(folderpath,"cal_"+c+"_B10") 
                    fileInfo = QFileInfo(raster)
                    baseName = fileInfo.baseName()
                    rlayer = QgsRasterLayer(raster, baseName)
                    outputs_GDALOGRRASTERCALCULATOR_1=processing.runalg('gdalogr:rastercalculator', rlayer,'1',None,'1',None,'1',None,'1',None,'1',None,'1','(A>0)*(1000*(1321.0789/(log(774.8853/(A*0.0003342+0.1)+1))-273.15))','0',4,None,outputName)

I was fortunate enough to get in touch with the author of the book so I will share his response here:

I suspect I may know what the problem is…after looking at this
reader’s problems in more depth, I’ve discovered that something has
changed in newer versions of QGIS, and the example code no longer
works as it is written. In technical terms, it seems that you now
need to instantiate the QApplication object before making the call to
QgsApplication.initQgis() — the example program in the book
instantiates the QApplication object after calling
QgsApplication.initQgis(), which causes the program to crash. To fix
this, change the main() function to look like the following:

def main():
    """  Our main program.
    """
    app = QApplication(sys.argv)
    QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
    QgsApplication.initQgis()

    viewer = MapViewer("C:/folder/shapefile.shp")
    viewer.show()

    app.exec_()

    QgsApplication.exitQgis()

As you can see, I’ve moved the «app = QApplication(sys.argv)» line to the top.

Important Note: Make sure that forward slashes are used in viewer = MapViewer("C:/folder/shapefile.shp") — using a backslash will result in an error message stating that the shapefile is invalid.

I also thought it would be worth mentioning that none of the above fixes (comments on the question) were necessary. So, the script will work if the paths are defined as follows:

SET OSGEO4W_ROOT=C:OSGeo4W64
SET QGIS_PREFIX=%OSGEO4W_ROOT%appsqgis
SET PATH=%PATH%;%QGIS_PREFIX%bin
SET PYTHONPATH=%QGIS_PREFIX%python;%PYTHONPATH%

Then, the entire script looks like this:

import sys
import os
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt



#############################################################################


class MapViewer(QMainWindow):
    def __init__(self, shapefile):
        QMainWindow.__init__(self)
        self.setWindowTitle("Map Viewer")

        canvas = QgsMapCanvas()
        canvas.useImageToRender(False)
        canvas.setCanvasColor(Qt.white)
        canvas.show()

        layer = QgsVectorLayer(shapefile, "layer1", "ogr")
        if not layer.isValid():
            raise IOError("Invalid shapefile")

        QgsMapLayerRegistry.instance().addMapLayer(layer)
        canvas.setExtent(layer.extent())
        canvas.setLayerSet([QgsMapCanvasLayer(layer)])

        layout = QVBoxLayout()
        layout.addWidget(canvas)

        contents = QWidget()
        contents.setLayout(layout)
        self.setCentralWidget(contents)

#############################################################################


def main():
    """  Our main program.
    """
    app = QApplication(sys.argv)
    QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
    QgsApplication.initQgis()

    viewer = MapViewer("C:/folder/shapefile.shp")
    viewer.show()

    app.exec_()

    QgsApplication.exitQgis()

#############################################################################

if __name__ == "__main__":
    main()

Execute it in the OSGEO4W Shell using the following command:

python "C:script.py"

Lastly, note that at the time of this writing, the script works properly and launches a viewer showing the shapefile referenced, but returns a few errors in the shell that do not seem to be problematic:

ERROR: Opening of authentication db FAILED
ERROR: Unable to establish authentication database connection
ERROR: Auth db could not be created and opened
QSqlDatabasePrivate::database: unable to open database: "unable to open database file Error opening database"
ERROR: Opening of authentication db FAILED

Much thanks to the author Erik Westra for providing me with this solution.

I’ve been using QGIS for a while and haven’t had any major issues so far, but now I am getting the following Python error messages and certain plugins won’t work. Any Ideas?


Failed to open Python console:


Traceback (most recent call last):
  File "", line 2, in 
  File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console.py", line 46, in show_console
    _console = PythonConsole(parent)
  File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console.py", line 83, in __init__
    self.console = PythonConsoleWidget(self)
  File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console.py", line 109, in __init__
    self.shell = ShellScintilla(self)
  File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console_sci.py", line 86, in __init__
    self.refreshSettingsShell()
  File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console_sci.py", line 141, in refreshSettingsShell
    self.setCaretForegroundColor(cursorColor)
TypeError: setCaretForegroundColor(self, QColor): argument 1 has unexpected type 'unicode'


Python version:
2.7.10 (default, Jul 30 2016, 18:31:42) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]

QGIS version:
2.18.0 'Las Palmas', exported

Python path:
['/Users/Harry/.qgis2/python/plugins/processing', '/Applications/QGIS.app/Contents/MacOS/../Resources/python', u'/Users/Harry/.qgis2/python', u'/Users/Harry/.qgis2/python/plugins', '/Applications/QGIS.app/Contents/MacOS/../Resources/python/plugins', '/Library/Frameworks/SQLite3.framework/Versions/C/Python/2.7', '/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site-packages', '/Library/Python/2.7/site-packages/scipy-override', '/Library/Python/2.7/site-packages/numpy-override', '/Library/Python/2.7/site-packages/matplotlib-override', '/Library/Frameworks/GDAL.framework/Versions/2.1/Python/2.7/site-packages', '/Library/Python/2.7/site-packages/PySAL-1.12.0-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/Library/Python/2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', u'/Users/Harry/.qgis2//python', '/Users/Harry/.qgis2/python/plugins/gearthview/ext-libs', u'/Users/Harry/Documents/Work/RCA/10.yr_2/ADS_3/mapping/qgs']

I also get this error when trying to run Cartographic Line Generalization plugin:

2016-12-07T15:01:02 1   
Traceback (most recent call last):
File "/Users/Harry/.qgis2/python/plugins/CartoLineGen-master/cartolinegen.py", line 210, in run
                self.count_vertices()
File "/Users/Harry/.qgis2/python/plugins/CartoLineGen-master/cartolinegen.py", line 234, in count_vertices
                feat = inLayer.getFeatures()
AttributeError: 'QgsRasterLayer' object has no attribute 'getFeatures'

Я купил эту книгу под названием Построение картографических приложений с помощью QGIS, и я пытаясь выполнить одно из упражнений. Есть один скрипт, который я пытаюсь запустить, который приводит к сбою python, генерирующему сообщение об ошибке «python.exe перестал работать».

import sys
import os
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt



#############################################################################


class MapViewer(QMainWindow):
    def __init__(self, shapefile):
        QMainWindow.__init__(self)
        self.setWindowTitle("Map Viewer")

        canvas = QgsMapCanvas()
        canvas.useImageToRender(False)
        canvas.setCanvasColor(Qt.white)
        canvas.show()

        layer = QgsVectorLayer(shapefile, "layer1", "ogr")
        if not layer.isValid():
            raise IOError("Invalid shapefile")

        QgsMapLayerRegistry.instance().addMapLayer(layer)
        canvas.setExtent(layer.extent())
        canvas.setLayerSet([QgsMapCanvasLayer(layer)])

        layout = QVBoxLayout()
        layout.addWidget(canvas)

        contents = QWidget()
        contents.setLayout(layout)
        self.setCentralWidget(contents)

#############################################################################


def main():
    """  Our main program.
    """
    QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'], True)
    QgsApplication.initQgis()

    app = QApplication(sys.argv)

    viewer = MapViewer("C:/folder/shapefile.shp")
    viewer.show()

    app.exec_()

    QgsApplication.exitQgis()

#############################################################################

if __name__ == "__main__":
    main()

Я не очень много знаю о Python с QGIS, поэтому я не слишком уверен, что вызывает сбой Python. Я уверен, что все модули импортируются правильно, потому что, если я определяю свои пути, а затем импортирую модули в сценарии с помощью оболочки OSGeo4W, сообщений об ошибках нет.

Вот как определяются мои пути:

SET OSGEO4W_ROOT=C:OSGeo4W64
SET QGIS_PREFIX=%OSGEO4W_ROOT%appsqgis
SET PATH=%PATH%;%QGIS_PREFIX%bin
SET PYTHONPATH=%QGIS_PREFIX%python;%PYTHONPATH%

Учитывая все это, я думаю, что в сценарии должно быть что-то не так. Однако, когда я проверяю сценарий с помощью http://pep8online.com/, я не могу исправить ошибки, которые В результате Python не падает.

Обратите внимание, что я пробовал Я пытался SET PATH=%QGIS_PREFIX%bin;%PATH% вместо SET PATH=%PATH%;%QGIS_PREFIX%bin безуспешно.

2 ответа

Лучший ответ

Мне посчастливилось связаться с автором книги, поэтому я поделюсь его ответом здесь:

Я подозреваю, что могу знать, в чем проблема … после более глубокого изучения проблем этого читателя я обнаружил, что что-то изменилось в более новых версиях QGIS, и пример кода больше не работает так, как написано. С технической точки зрения кажется, что теперь вам нужно создать экземпляр объекта QApplication перед выполнением вызова QgsApplication.initQgis () — пример программы в книге создает экземпляр объекта QApplication после вызова QgsApplication.initQgis (), что заставляет программу врезаться . Чтобы это исправить, измените функцию main (), чтобы она выглядела следующим образом:

def main():
    """  Our main program.
    """
    app = QApplication(sys.argv)
    QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
    QgsApplication.initQgis()

    viewer = MapViewer("C:/folder/shapefile.shp")
    viewer.show()

    app.exec_()

    QgsApplication.exitQgis()

Как видите, я переместил строку «app = QApplication (sys.argv)» в начало.

Важное примечание . Убедитесь, что в viewer = MapViewer("C:/folder/shapefile.shp") используются косые черты forward — при использовании обратной косой черты появляется сообщение о том, что Шейп-файл недействителен.

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

SET OSGEO4W_ROOT=C:OSGeo4W64
SET QGIS_PREFIX=%OSGEO4W_ROOT%appsqgis
SET PATH=%PATH%;%QGIS_PREFIX%bin
SET PYTHONPATH=%QGIS_PREFIX%python;%PYTHONPATH%

Тогда весь скрипт выглядит так:

import sys
import os
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt



#############################################################################


class MapViewer(QMainWindow):
    def __init__(self, shapefile):
        QMainWindow.__init__(self)
        self.setWindowTitle("Map Viewer")

        canvas = QgsMapCanvas()
        canvas.useImageToRender(False)
        canvas.setCanvasColor(Qt.white)
        canvas.show()

        layer = QgsVectorLayer(shapefile, "layer1", "ogr")
        if not layer.isValid():
            raise IOError("Invalid shapefile")

        QgsMapLayerRegistry.instance().addMapLayer(layer)
        canvas.setExtent(layer.extent())
        canvas.setLayerSet([QgsMapCanvasLayer(layer)])

        layout = QVBoxLayout()
        layout.addWidget(canvas)

        contents = QWidget()
        contents.setLayout(layout)
        self.setCentralWidget(contents)

#############################################################################


def main():
    """  Our main program.
    """
    app = QApplication(sys.argv)
    QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
    QgsApplication.initQgis()

    viewer = MapViewer("C:/folder/shapefile.shp")
    viewer.show()

    app.exec_()

    QgsApplication.exitQgis()

#############################################################################

if __name__ == "__main__":
    main()

Выполните его в оболочке OSGEO4W с помощью следующей команды:

python "C:script.py"

И наконец, обратите внимание, что на момент написания этой статьи скрипт работал правильно и запускал программу просмотра, показывающую ссылочный шейп-файл, но возвращал в оболочке несколько ошибок, которые не кажутся проблемными:

ERROR: Opening of authentication db FAILED
ERROR: Unable to establish authentication database connection
ERROR: Auth db could not be created and opened
QSqlDatabasePrivate::database: unable to open database: "unable to open database file Error opening database"
ERROR: Opening of authentication db FAILED

Большое спасибо автору Эрику Вестре за предоставление мне этого решения.


3

ge0m3try
4 Июл 2016 в 00:43

Одна вещь, которая кажется подозрительной, это то, что вы создаете элемент графического интерфейса без предоставления ему родителя — QgsMapCanvas() — и затем пытаетесь вручную show() его перед добавлением в макет. Вы никогда не должны вызывать show() для подвиджетов, и все подвиджеты должны быть связаны с основным виджетом (или одним из его других подвиджетов).

Кроме того, вы должны хранить постоянные ссылки на объекты Python; в противном случае возможно, что лежащий в основе объект C ++ будет собирать мусор и вызывать сбой вашей программы. Вы делаете это, назначая свои виджеты и макеты атрибуту self

Ex .

self.layout = QVBoxLayout(...
self.layer = ...

Вы должны добавить холст, как это, вам не нужно вызывать .show()

self.canvas = QgsMapCanvas(self)
layout.addWidget(self.canvas)


1

Brendan Abel
22 Июн 2016 в 20:00

Я использую QGIS некоторое время, но после использования QGIS 2 плагин OpenLayers не работает для меня на моем домашнем ПК. Тем не менее, я успешно установил ту же версию на своем рабочем месте. Я просмотрел другие посты и попытался настроить CRS и разрешить на лету, но у меня это не работает.

Я также попытался удалить / переустановить.

Произошла ошибка при выполнении кода Python:

Трассировка (последний вызов был последним): файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin openlayers_plugin.py», строка 48, в самом addLayer. plugin.addLayer (self) Файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin openlayers_plugin.py», строка 194, в слое addLayer = OpenlayersLayer (self.iface, self .__ordinRSGoogle, self.olLayerTypeRegistry) Файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin openlayers_layer.py», строка 64, в __init
self.page = OLWebPage () Файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin openlayers_layer.py «, строка 38, в init
proxy = getProxy () Файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin tools_network.py», строка 42, в getProxy proxy.setPort (settings.value («/ proxyPort», 10, type = int)) TypeError: невозможно преобразовать QVariant типа 10 в QMetaType типа 2

Версия Python: 2.7.5 (по умолчанию, 15 мая 2013 г., 22:44:16) [MSC v.1500 64 бит (AMD64)]

Версия QGIS: 2.0.1-Dufour Dufour, d94c044

Путь к Python: [‘C: / PROGRA ~ 1 / QGISDU ~ 1 / apps / qgis /./ python / plugins processing’, ‘C: Users Lee .qgis2 python plugins GeoCoding’, ‘C: /PROGRA~1/QGISDU~1/apps/qgis/./python ‘,’ C: Users Lee / .qgis2 / python ‘,’ C: Users Lee / .qgis2 / python / plugins ‘,’ C : / PROGRA ~ 1 / QGISDU ~ 1 / apps / qgis /./ python / plugins ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 bin python27.zip ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 DLLs ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib plat-win ‘ , ‘C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib lib-tk’, ‘C: PROGRA ~ 1 QGISDU ~ 1 bin’, ‘C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages PIL ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages win32 ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages win32 lib ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Pythonwin ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Shapely-1.2. 18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C : PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw-unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘] PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages win32 lib ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Pythonwin ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Shapely-1.2.18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw -unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 приложения QGIS питон Plugins fTools инструменты] PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages win32 lib ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Pythonwin ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Shapely-1.2.18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw -unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 приложения QGIS питон Plugins fTools инструменты]2.18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C : PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw-unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘]2.18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C : PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw-unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘]egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘]egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘]

Понравилась статья? Поделить с друзьями:
  • Ошибка при выполнении сервера сценариев windows параметр задан неверно
  • Ошибка лучшего сценария
  • Ошибка инициализации сервера сценариев windows
  • Ошибка выполнения сценария при обновлении 1с
  • Ошибка выполнения сценария на странице windows 10