QGIS – Fixing AttributeError: ‘QgsRasterLayer’ Object Has No Attribute ‘pendingFields’

pyqgispythonqgisqgis-3qgis-plugins

Remember i am using Python Version 3.6.2 QGIS Version 3.2

while running my code i am getting this error:

fields = selectedLayer.pendingFields()
AttributeError: 'QgsRasterLayer' object has no attribute 'pendingFields

if i am using fields() instead of pendingFields() because of qgis version 3x

getting this error:

fields = selectedLayer.fields()
AttributeError: 'QgsRasterLayer' object has no attribute 'fields

i am new in this field so please tell me properly what should i do

here is my code:

    filename = self.dlg.lineEdit.text()
    output_file = open(filename, 'w')

    selectedLayerIndex = self.dlg.comboBox.currentIndex()
    selectedLayer = layers[selectedLayerIndex]
    fields = selectedLayer.pendingFields()
    fieldnames = [field.name() for field in fields]

    for f in selectedLayer.getFeatures():
        line = ','.join(unicode(f[x]) for x in fieldnames) + '\n'
        unicode_line = line.encode('utf-8')
        output_file.write(unicode_line)
    output_file.close() 

Best Answer

Your code will not work with raster layers as they have neither fields (QGIS doesn't support raster attribute tables - link) nor features.

fields (pendingFields in 2x) and getFeatures are methods of the QgsVectorLayer class.

So test if your layer has a fields method (i.e if hasattr(selectedLayer, 'fields'): etc... and ignore it if it doesn't. i.e

filename = self.dlg.lineEdit.text()
selectedLayerIndex = self.dlg.comboBox.currentIndex()
selectedLayer = layers[selectedLayerIndex]
if hasattr(selectedLayer, 'fields'):

    fields = selectedLayer.pendingFields()
    fieldnames = [field.name() for field in fields]

    for f in selectedLayer.getFeatures():
        etc...