私はかなり新しいです。私は、関数間でデータを渡すという概念に精通しています。理論的には 関数間の変数にデータを渡すことができません
、以下のコードは、ターミナル(Pythonのfilename.py file.txtなど)を経由してうまく動作しますが、私はワークフローを追加する場所の変数ストアファイルへのパスと、それを渡す
def c():
r = raw_input("Ask Something? ")
..
return r
def p(x):
...
do something
r = c()
p(r)
関数(processFile)に渡します。私はちょうど関数に渡されるデータ/値を取得できません。
これは私が編集しようとしているコードです:
def registerException(exc):
exceptions[exc] += 1
def processFile(x):
with open(x, "r") as fh:
currentMatch = None
lastLine = None
addNextLine = False
for line in fh.readlines():
if addNextLine and currentMatch != None:
addNextLine = False
currentMatch += line
continue
match = REGEX.search(line) != None
if match and currentMatch != None:
currentMatch += line
elif match:
currentMatch = lastLine + line
else:
if currentMatch != None:
registerException(currentMatch)
currentMatch = None
lastLine = line
addNextLine = CONT.search(line) != None
# If last line in file was a stack trace
if currentMatch != None:
registerException(currentMatch)
for f in sys.argv[1:]:
processFile(f)
for item in sorted(exceptions.items(), key=lambda e: e[1], reverse=True):
print item[1], ":", item[0]
私は、グローバルまたはローカルとして変数を宣言する場合、それは問題doesntの。誰かがこの問題を解決するのを助けてくれますか?
編集1:私はダニエルが提案された変更を適用してきたし、今私は取得しています
:はTypeError:「NoneType」オブジェクトが反復可能ではありません。私はいくつかの変更を加えて、スクリプトを実行するときに削除sys.argvの[1]それは、コマンドラインで引数を必要とするため
def c():
path = raw_input("Path to file? ")
r = os.path.abspath(path)
def process_file(filename):
current = None
last_line = None
continue_line = False
with open(filename, "r") as fh:
for line in fh:
if continue_line and current is not None:
continue_line = False
current += line
continue
if REGEX.search(line):
if current is None:
current = last_line
current += line
else:
if current is not None:
yield current
current = None
last_line = line
continue_line = CONT.search(line)
# If last line in file was a stack trace
if current is not None:
yield current
def process_files(filenames):
exceptions = defaultdict(int)
for filename in filenames:
for exc in process_file(filename):
exceptions[exc] += 1
for item in sorted(exceptions.items(), key=lambda e: e[1], reverse=True):
print item[1], ":", item[0]
r = c()
process_files(r)
:以下
はコードです。
新しいエラーは、OSパスに起因すると思います。これをどうすれば解決できますか?
は、どのような変数あなたが話しているの? –
こんにちは、私が変数x = pathtofileをプロセスファイル関数の前に追加すると、なんらかの理由で値が渡されていません。私はグローバルとローカルの両方で作成しようとしました。また、この変数を取得してそれをprocessfile関数に渡す関数を作成しようとしましたが、同じ結果が得られました。コードはターミナル(python file.py log.txt)でうまく動作しますが、コードにpathtofileをハードコードしたいと考えています。 –