2016-10-06 1 views
0

ここで私が見つけたスクリプトの一部を使って、Windows PC上のディレクトリを実行してXMLファイルを生成します。しかし、私は上記のエラーに遭遇していると私はどのようにエラーを処理するか分からない。私はtry/exceptを追加しましたが、それでもなおクラッシュします。 「DirTree3((os.getcwd())」xmlへのディレクトリリスト - 'str'と 'NoneType'オブジェクトを連結できません - どのように処理するのですか?

def DirTree3(path): 
    try: 
     result = '<dir>%s\n' % xml_quoteattr(os.path.basename(path)) 
     for item in os.listdir(path): 
      itempath = os.path.join(path, item) 
      if os.path.isdir(itempath): 
       result += '\n'.join(' ' + line for line in 
            DirTree3(os.path.join(path, item)).split('\n')) 
      elif os.path.isfile(itempath): 
       result += ' <file> %s </file>\n' % xml_quoteattr(item) 
     result += '</dir> \n' 
     return result 
    except Exception: 
     pass 


print '<DirectoryListing>\n' + DirTree3("C:/") + '\n</DirectoryListing>' 

としてサイドノートで:私は「DirTree3(」/ C「)を」置き換えることによって、私の現在の作業ディレクトリであることをディレクトリを設定する場合、これは完璧に動作しますこのスクリプトは管理者権限のないシステム上で実行されるため、adminとしての実行はオプションではありません

+0

どのコード行がエラーに苦情を言いますか? – galaxyan

+0

try/exceptionは助けになりません。あなたの関数は例外を返すとNoneTypeを返します。 – galaxyan

+0

最後の行に文句を言います。 DirTree3関数を呼び出すものです。 "DirTree3(" C:/ ")"を "DirTree3((os.getcwd())"に置き換えることによって、現在の作業ディレクトリになるようにディレクトリを設定すると、これは完璧に機能します –

答えて

1

パスのアクセスエラーを取得して無視したいという下記のコメントに基づいて、他のタイプの例外が発生した場合でも終了することに注意してください。

def DirTree3(path): 
    try: 
     result = '<dir>%s\n' % xml_quoteattr(os.path.basename(path)) 
     try: 
      items = os.listdir(path) 
     except WindowsError as exc: 
      return '<error> {} </error>'.format(xml_quoteattr(str(exc))) 

     for item in items: 
      itempath = os.path.join(path, item) 
      if os.path.isdir(itempath): 
       result += '\n'.join(' ' + line for line in 
            DirTree3(os.path.join(path, item)).split('\n')) 
      elif os.path.isfile(itempath): 
       result += ' <file> %s </file>\n' % xml_quoteattr(item) 
     result += '</dir> \n' 
     return result 
    except Exception as exc: 
     print('exception occurred: {}'.format(exc)) 
     raise 

print '<DirectoryListing>\n' + DirTree3("C:/") + '\n</DirectoryListing>' 
+0

これはエラーが受信されたため、アクセスの問題のようです:例外が発生しました:[エラー5]アクセスが拒否されました: '/$Recycle.Bin\\S-1-5-18/*.*'。 –

+0

さて、あなたは問題を知っています。どのように対処したいのですか?あなたの心を読むことはできません。 – martineau

+0

許可の問題に遭遇することなく同じ結果を達成するための方法はありますか?私は、システム上のすべてのファイルをハッシュし、 "os.walk"を利用するコードをもう1つ持っています。許可要件を持つ "os.isdir"に移動しますか? –

関連する問題