2017-02-25 76 views
0

在Eclipse中使用PyDev並接收到「AttributeError:'命名空間'對象沒有屬性'perfect4k',圖片保存在項目文件夾下;但是,好像它不能夠。加載在此先感謝,我是Python的紐比僅供參考,這是一個示例代碼我借用了互聯網在Python中使用Argparse加載圖片時出現錯誤

import numpy as np 
from PIL import Image 
import time 
from mazes import Maze 
from factory import SolverFactory 

# Read command line arguments - the python argparse class is convenient here. 
import argparse 
sf = SolverFactory() 
parser = argparse.ArgumentParser() 
parser.add_argument("-m", "--method", nargs='?', const=sf.Default, default=sf.Default, 
         choices=sf.Choices) 
parser.add_argument("perfect4k.png", help="4kImage", default=None, nargs='?') #input_file 
parser.add_argument("SaveM.png", help="4kImageSave", default=None, nargs='?') #output_file 
args = parser.parse_args() 

method = args.method 

# Load Image 
print ("Loading Image") 
im = Image.open(args.perfect4k.png) #args.input_file 

# Create the maze (and time it) - for many mazes this is more time consuming than solving the maze 
print ("Creating Maze") 
t0 = time.time() 
maze = Maze(im) 
t1 = time.time() 
print ("Node Count:", maze.count) 
total = t1-t0 
print ("Time elapsed:", total, "\n") 

# Create and run solver 
[title, solver] = sf.createsolver(args.method) 
print ("Starting Solve:", title) 

t0 = time.time() 
[result, stats] = solver(maze) 
t1 = time.time() 

total = t1-t0 

# Print solve stats 
print ("Nodes explored: ", stats[0]) 
if (stats[2]): 
    print ("Path found, length", stats[1]) 
else: 
    print ("No Path Found") 
print ("Time elapsed: ", total, "\n") 

""" 
Create and save the output image. 
This is simple drawing code that travels between each node in turn, drawing either 
a horizontal or vertical line as required. Line colour is roughly interpolated between 
blue and red depending on how far down the path this section is. Dependency on numpy 
should be easy to remove at some point. 
""" 

print ("Saving Image") 
mazeimage = np.array(im) 
imout = np.array(mazeimage) 
imout[imout==1] = 255 
out = imout[:,:,np.newaxis] 

out = np.repeat(out, 3, axis=2) 

resultpath = [n.Position for n in result] 

length = len(resultpath) 

px = [0, 0, 0] 
for i in range(0, length - 1): 
    a = resultpath[i] 
    b = resultpath[i+1] 

    # Blue - red 
    px[0] = int((i/length) * 255) 
    px[2] = 255 - px[0] 

    if a[0] == b[0]: 
     # Ys equal - horizontal line 
     for x in range(min(a[1],b[1]), max(a[1],b[1])): 
      out[a[0],x,:] = px 
    elif a[1] == b[1]: 
     # Xs equal - vertical line 
     for y in range(min(a[0],b[0]), max(a[0],b[0]) + 1): 
      out[y,a[1],:] = px 

img = Image.fromarray(out) 
img.save(args.SaveM.png) #CHANGED 

輸出:。

pydev debugger: starting (pid: 12436) 
Traceback (most recent call last): 
    File "C:\Users\Gabriel\.p2\pool\plugins\org.python.pydev_5.5.0.201701191708\pysrc\pydevd.py", line 1537, in <module> 
Loading Image 
    globals = debugger.run(setup['file'], None, None, is_module) 
    File "C:\Users\Gabriel\.p2\pool\plugins\org.python.pydev_5.5.0.201701191708\pysrc\pydevd.py", line 976, in run 
    pydev_imports.execfile(file, globals, locals) # execute the script 
    File "C:\Users\Gabriel\.p2\pool\plugins\org.python.pydev_5.5.0.201701191708\pysrc\_pydev_imps\_pydev_execfile.py", line 25, in execfile 
    exec(compile(contents+"\n", file, 'exec'), glob, loc) 
    File "C:\Users\Gabriel\Desktop\AP Computer Science\PythonMaze\solve.py", line 21, in <module> 
    im = Image.open(args.perfect4k.png) #args.input_file 
AttributeError: 'Namespace' object has no attribute 'perfect4k' 
+0

具體是什麼錯誤 - 你可以在這裏添加運行時輸出/堆棧跟蹤? –

+0

@DannyStaple我編輯的帖子添加輸出。希望這可以幫助 – E36

回答

0

Python變量名不能包含一個點「。」字符,因爲這是用來引用一些進一步的屬性目的。

名稱「perfect4k.png」用於其中一個參數,並且此參數的行爲聽起來沒有明確的定義。

我建議使用下劃線「_」代替它。如果您希望幫助文本顯示該名稱,則可以嘗試使用關鍵字參數「metavar」。它Python文檔中描述爲:

metavar - A name for the argument in usage messages.

(參考:https://docs.python.org/3/library/argparse.html#the-add-argument-method

在特定情況下,你可以這樣添加:

parser.add_argument("input_file", metavar="perfect4k.png", help="4kImage", 
    default=None, nargs='?') #input_file 

所以實際的說法是「INPUT_FILE 「,但在幫助輸出中將被稱爲」perfect4k.png「。

這意味着您還需要在代碼的其他地方將其稱爲input_file。您還需要對輸出文件進行相同的處理。

+0

謝謝!這固定了它。 – E36

+0

如果是這樣,你可以把它標記爲回答嗎? –

相關問題