7

I have prepared a python code and I got the following errors:

"Parsing error IndentationError: expected an indented block (line 11)"

and

"Runtime error Traceback (most recent call last): File "", line 10, in TypeError: 'NoneType' object is not iterable"

The purpose of the code is to list all feature datasets & feature classes from a single geodatabase into CSV.

import csv, arcpy, os
from arcpy import env

env.workspace = "I:\J_Prashant's External HD\High Speed Rail\Task from Greg Campbell\Layers\HST_BP_GIS_Data.gdb"

datasetList = arcpy.ListDatasets('*','Feature')

for dataset in datasetList:
    arcpy.env.workspace = dataset
    fcList = arcpy.ListFeatureClasses()
    for fc in fcList:
        print arcpy.env.workspace,fc

csv_out = open('I:\\python\\List-Feature-Class\\test2.csv', 'wb')
mywriter = csv.writer(csv_out)
rows = zip(arcpy.env.workspace,fc)
mywriter.writerows(rows)
csv_out.close()
  • 1
    Try putting your gdb in a directory with no spaces in the filnames (e.g. I:\GIS\HST_BP_GIS_Data.gdb) and see if that works. Some ArcPy tools can't handle spaces. – Erica Sep 16 '14 at 17:53
  • 3
    I would also add never use special characters such as & - ' in your folder name as these will upset your code. – Hornbydd Sep 16 '14 at 19:13
  • 3
    use 'r' in front of your env.workspace name or use double back-slashes the way you do with your csv_out variable to negate the escape character. It sounds like your datasetList object is still null because it isn't reading it properly from the workspace. – Sleep6 Sep 16 '14 at 19:20
  • didn't work though...I am getting the same error – user37082 Sep 16 '14 at 23:26
  • Try this in shell, see if it returns false - os.path.isdir(yourworkspace) If you should be able to run something as simple as the example shown here - resources.arcgis.com/en/help/main/10.1/index.html#//… Try it and see. – Sleep6 Sep 17 '14 at 17:21
9

I think you should research/ask about writing to a CSV file separately at StackOverflow because the technique you are using to do that is pure Python rather than ArcPy.

For the remainder I think this should work (use a modification of your file geodatabase location where I have used C:\temp\test.gdb):

import arcpy

arcpy.env.workspace = r"C:\temp\test.gdb"

datasetList = arcpy.ListDatasets('*','Feature')

for dataset in datasetList:
    arcpy.env.workspace = dataset
    fcList = arcpy.ListFeatureClasses()
    for fc in fcList:
        print arcpy.env.workspace,fc

The two main issues were:

  1. using back slashes in your pathname - you need to convert them to double backslashes, change them to forward slashes or simply escape them using the letter r like I have above
  2. the single quote in your pathname will leave Python looking for the other one to close that string
  • This is not working for me. Lists a few feature classes then dies with "TypeError: 'NoneType' object is not iterable" error. In fact i didn't find any script that works and simply spits out a list of feature classes. Either errors out or doesn't run at all (ESRI examples). Was hoping for paste and run solution while substituting a path to my gdb. Any ideas? – Jakub Sisak GeoGraphics May 9 '18 at 15:54
  • @JakubSisakGeoGraphics I think it needs a new question that says you are trying to implement this answer and gives details about the data items that work and those that fall over. – PolyGeo May 9 '18 at 20:05
  • I Faced the same NoneType problem like Jakub Sisak GeoGraphics. There is a missing reference to the GDB. arcpy.List_Datasets() is only returning the name of the dataset not the full path. The following worked for me: for dataset in datasetList: arcpy.env.workspace = "C:/temp/test.gdb/"+dataset – EikeMike Nov 9 '18 at 9:37
0

Code sample revisited below. Just move the arcpy.ListFeatureClasses out of the look and the code will run successfully.

datasetList = arcpy.ListDatasets('*','Feature') fcList = arcpy.ListFeatureClasses()

for dataset in datasetList: arcpy.env.workspace = dataset

for fc in fcList:
    print arcpy.env.workspace,fc
-1

Try to add the path to the name of each dataset when you establish the env.workspace value:

import csv, arcpy, os
from arcpy import env

path_ = r"I:\J_Prashant's External HD\High Speed Rail\Task from Greg Campbell\Layers\HST_BP_GIS_Data.gdb"

env.workspace = path_

datasetList = arcpy.ListDatasets('*','Feature')

for dataset in datasetList:

arcpy.env.workspace = os.path.join(path_,dataset)
fcList = arcpy.ListFeatureClasses()
for fc in fcList:
    print arcpy.env.workspace,fc
  • This code looks like it would give an indentation error on the line that sets arcpy.env.workspace, and it seems like you have added an extra line of code and another function, making it less pythonic. – PolyGeo Nov 14 '15 at 6:26
-2

I got the same error. The problem is that the directory name is too long (too many total characters). Copy the data to the root level or one directory up. It works! I think this is a bug. I did not do further tests as to how many characters or how many levels of folders it takes to cause the error.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy