PyCharm แสดงข้อผิดพลาดการอ้างอิงที่ไม่ได้รับการแก้ไขสำหรับรหัสที่ถูกต้อง


279

ฉันใช้ PyCharm เพื่อทำงานในโครงการ โครงการเปิดและกำหนดค่าด้วยล่ามและสามารถทำงานได้สำเร็จ เส้นทางของล่ามระยะไกลถูกแมปอย่างเหมาะสม ดูเหมือนว่าจะเป็นการกำหนดค่าที่ถูกต้อง แต่ PyCharm กำลังเน้นรหัสที่ถูกต้องของฉันพร้อมกับข้อผิดพลาด เหตุใดจึงไม่ตรวจพบสิ่งเหล่านี้แม้ว่ารหัสจะทำงานอย่างไร มีวิธีใดที่จะทำให้ PyCharm จดจำสิ่งเหล่านี้ได้อย่างถูกต้อง?


อินสแตนซ์ที่เฉพาะเจาะจงของปัญหานี้มาพร้อมกับล่ามระยะไกล แต่ปัญหาปรากฏขึ้นที่ล่ามท้องถิ่นเช่นกัน


ฉันมีปัญหาเดียวกันและหมกมุ่นอยู่กับมัน วิธีการแก้ปัญหาที่นี่
Maks

คำตอบ:


445

ไฟล์ | ทำให้แคชใช้ไม่ได้ ... และการรีสตาร์ท PyCharm ช่วย


3
นี่เป็นวิธีเดียวที่ทำงานกับ PyCharm 4.0.x ในกรณีของฉัน ความจริงก็คือถ้ามีบางอย่างผิดพลาดขึ้นและไม่รีเฟรช (บางครั้งมันก็แสดงล่ามเดียวกันซ้ำหลายครั้งในรายการ) คุณจะต้องลบไฟล์ด้วยตนเอง ... ฉันต้องลบโฟลเดอร์. ครั้งเดียวด้วยซ้ำ .
danius

10
นี่คือเฮฟวี่เวทมาก ไม่มีวิธีใดที่จะได้รับตัวเลือก "เส้นทางการรีเฟรช" แบบเก่าใน PyCharm 4.5 หรือไม่?
Chris Withers

6
มันน่ารำคาญจริง ๆ ที่ IDE ดังกล่าวไม่ดูแลการดำเนินการที่เรียบง่าย
Eduardo Pignatelli

3
มันใช้งานได้ในไม่ช้า หลังจากนั้นไม่กี่นาทีฉันก็ได้รับคำเตือนเดิมอีกครั้ง
Aseem

คำตอบที่ได้รับการยอมรับคือเฮฟวี่เวทและเป็นไปได้อย่างมากที่จะไม่จัดการกับปมปัญหา นี่คือข้อมูลที่มาจากปากม้า: JetBrains - PyCharm Content Root "PyCharm ใช้รากที่มาเป็นจุดเริ่มต้นสำหรับการแก้ไขการนำเข้า"ฉันมีปัญหาเหมือนกับในชื่อเพราะในบางโครงการฉันต้องใช้ต้นไม้ที่แหล่งที่มา อยู่ในโฟลเดอร์ย่อย PyCharm จะสับสนเกี่ยวกับการนำเข้า การฆ่าแคชอาจช่วยได้สักครู่ แต่ไม่ใช่วิธีที่ถูกต้อง ทำเครื่องหมายไดเรกทอรีแหล่งที่มาเป็นรูทและทั้งหมดเป็นสิ่งที่ดี
predmod

133

คำตอบของ Dmitry ไม่ได้ผลสำหรับฉัน

ฉันได้ทำงานด้วยการไปที่ Project Interpreters การเลือกแท็บ "พา ธ " และกดปุ่มรีเฟรชในเมนูย่อยนั้น มันเติมข้อมูลอัตโนมัติด้วยสิ่งที่เรียกว่า "python-skeletons"

แก้ไข : ภาพหน้าจอโดยใช้ PyCharm 3.4.1 (มันค่อนข้างถูกซ่อนไว้อย่างดี)

ป้อนคำอธิบายรูปภาพที่นี่


6
"Python Interpreters" อยู่ที่ไหน คุณหมายถึง "Project Interpreters" หรือไม่ ฉันกำลังใช้ Linux และฉันไม่พบแท็บ Paths เช่นกัน
Baskaya

1
ใน PyCharm 3.4 บน OSX มันเป็นไอคอนที่ดูเหมือนโครงสร้างโฟลเดอร์เล็ก ๆ และไม่พูดว่า "เส้นทาง"
Daniel Bushman

12
สำหรับทุกคนยังคงสับสน (ใน PyCharm 3.4.1):Settings > Project Settings > Project Interpreter > Project Interpreters (gear button > more) > --Select the interpreter-- > Interpreter Paths (Directory Tree button on the right) > Reload List of Paths (Blue refresh-like button)
raphaeltm

5
ไม่มีปุ่มรีเฟรชดังกล่าวใน PyCharm 4 มีเพียงเครื่องหมายบวกและลบ
dtheodor

3
@Sarah ใน PyCharm 4.0.4 ในหน้าต่าง "Interpreter Paths" ฉันไม่มีปุ่ม "โหลดรายการเส้นทาง" (ไอคอนรีเฟรชสีน้ำเงินด้านล่าง) นอกจากนี้ฉันไม่เห็นเส้นทางใด ๆ ในรายการและปุ่มบวกและลบถูกปิดใช้งาน
Henrik Heimbuerger

70

มีวิธีแก้ไขปัญหามากมายเช่นนี้บางวิธีสะดวกกว่าวิธีอื่น ๆ และไม่สามารถใช้งานได้เสมอ

นี่คือทั้งหมดที่คุณสามารถลองได้จาก 'ด่วน' ถึง 'น่ารำคาญ':

  • ทำFile-> Invalidate Caches / Restartและรีสตาร์ท PyCharm
    • คุณสามารถทำได้หลังจากวิธีการด้านล่างใด ๆ เพื่อให้แน่ใจ
  • ก่อนตรวจสอบซึ่งล่ามคุณกำลังใช้งาน: Run-> Edit Configurations-> ->ConfigurationPython Interpreter
  • รีเฟรชเส้นทางของล่ามของคุณ:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> 'Project Interpreter': ไอคอนเกียร์ ->More...
    • คลิกปุ่ม 'แสดงเส้นทาง' (ล่างสุด)
    • คลิกปุ่ม 'รีเฟรช' (ล่างสุด)
  • ลบล่ามและเพิ่มอีกครั้ง:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> 'Project Interpreter': ไอคอนเกียร์ ->More...
    • คลิกปุ่ม 'ลบ'
    • คลิกปุ่ม 'เพิ่ม' และเพิ่ม interpeter ของคุณอีกครั้ง
  • ลบการตั้งค่าโครงการของคุณ
    • ลบ.ideaโฟลเดอร์ของโครงการ
    • ปิดและเปิด PyCharm อีกครั้ง
    • เปิดโครงการของคุณตั้งแต่เริ่มต้น
  • ลบการตั้งค่าผู้ใช้ PyCharm ของคุณ (แต่สำรองก่อน)
    • ~/.PyCharm50 บน Mac
    • %homepath%/.PyCharm50 บน Windows
  • สลับไปที่ล่ามอื่นแล้วกลับไปที่ล่ามที่คุณต้องการอีกครั้ง
  • สร้างสภาพแวดล้อมเสมือนจริงใหม่และเปลี่ยนเป็นล่ามของสภาพแวดล้อมนั้น
  • เปลี่ยนเป็นล่ามอื่นโดยสิ้นเชิงอย่าสลับกลับ

ฉันได้รับปัญหานี้มานานเท่าที่ฉันได้ใช้ PyCharm และพวกเขายังคงไม่สามารถแก้ไขได้อย่างน่าเชื่อถือ สิ่งที่ดีที่คุณได้ครอบคลุมงานส่วนใหญ่ในทางใดทางหนึ่งลงเอยด้วยการแก้ไขปัญหา ขำ ๆ ฉันจะกลับมาที่คำตอบนี้เป็นครั้งคราวเพื่อหาว่าอะไรที่ฉันควรลองทำ
Alex

3
ฉันลงรายการนี้และลบ / เพิ่มล่ามที่เหมาะกับฉันแล้ว ขอบคุณ!
Mark

16

ในกรณีของฉันมันเป็นโครงสร้างไดเรกทอรี โครงการของฉันมีลักษณะเช่นนี้:

+---dir_A
    +---dir_B
        +app
        |
        \-run.py

คลิกขวาที่ dir_b> "ทำเครื่องหมายไดเรกทอรีเป็น"> "โครงการราก"


2
คำถามไม่ใช่ PyCharm ที่ไม่รู้จักรหัสโครงการ ไม่รู้จักวิธีในตัวของ Python มาตรฐาน
florisla

แก้ไขปัญหาของฉันใน PyCharm 2019.3.3 บน MacOS
samisnotinsane

11

ฉันพบว่าตัวเองกำลังลบและเพิ่มล่ามระยะไกลอีกครั้งเพื่อแก้ไขปัญหานี้เมื่อ Invalidating Caches หรือ Refreshing Path ไม่ทำงาน

ฉันใช้คนจรจัดและทุกครั้งและสักครู่ถ้าฉันเพิ่ม VM ใหม่ไปยังการตั้งค่าแบบหลาย vm ของฉันการส่งต่อพอร์ตจะเปลี่ยนไปและดูเหมือนว่าจะสับสน PyCharm เมื่อพยายามใช้พอร์ตที่ไม่ถูกต้องสำหรับ SSH ดูเหมือนว่าการเปลี่ยนพอร์ตจะไม่ช่วยในการอ้างอิงที่ไม่สมบูรณ์


10

หากไม่มีวิธีอื่นใดที่เหมาะกับคุณให้ลอง (สำรอง) และลบโฟลเดอร์ ~ / .PyCharm40 จากนั้นเปิด PyCharm อีกครั้ง สิ่งนี้จะฆ่าความชอบของคุณทั้งหมดเช่นกัน

บน Mac คุณต้องการลบ ~ / Library / Caches / Pycharm40 และ ~ / Library / Preferences / PyCharm40

และบน Windows: C: \ Users \ $ USER.PyCharm40


10

ทดสอบกับ PyCharm 4.0.6 (OSX 10.10.3) ทำตามขั้นตอนนี้:

  1. คลิกเมนู PyCharm
  2. เลือก Project Interpreter
  3. เลือกไอคอนเกียร์
  4. เลือกปุ่มเพิ่มเติม
  5. เลือก Project Interpreter ที่คุณอยู่
  6. เลือกปุ่มทรีไดเรกทอรี
  7. เลือกโหลดรายการเส้นทางใหม่

แก้ไขปัญหา!


10

ง่ายมาก

คุณเพียงแค่ต้องทำเครื่องหมายไดเรกทอรีรากของคุณเป็น: แหล่งราก (สีแดง) และแอปพลิเคชันของคุณ: ยกเว้นราก (สีน้ำเงิน),

จากนั้นการอ้างอิงที่ไม่ได้รับการแก้ไขจะหายไป

  • ป้อนคำอธิบายรูปภาพที่นี่ถ้าคุณใช้ PyChram pro มันจะทำสิ่งนี้ให้คุณโดยอัตโนมัติ

5
ฉันมี pycharm pro และมันก็ไม่ได้ทำเพื่อฉัน แต่หลังจากที่ฉันทำเครื่องหมายโฟลเดอร์ด้วยตนเองอย่างถูกต้องมันทำงาน
Jose

ใช่นั่นคือคำตอบที่ถูกต้องและไม่ใช่ตัวเลือกทางนิวเคลียร์ที่ผลข้างเคียงจะช่วยสักครู่ แต่ไม่ได้บอกวิธีที่ Jetbrains Tooling คิดว่า ("kill the cache" ใช่แล้ว ... และเมื่อมันถูกสร้างใหม่? "ฆ่ามันอีกครั้ง ! ") ชื่อซึ่งเป็นปัญหาที่แท้จริงของโครงการของฉันโดยที่รูทโครงการไม่จำเป็นต้องเป็นแหล่งที่มาของรูทและการนำเข้าไม่เข้าใจ นี่คือข้อมูลโดยตรงจากปากม้าjetbrains.com/help/pycharm/content-root.html "PyCharm ใช้รากที่มาเป็นจุดเริ่มต้นสำหรับการแก้ไขการนำเข้า"!
predmod

6

ขออภัยที่ชนคำถามนี้ แต่ฉันมีการปรับปรุงที่สำคัญที่จะทำให้

คุณอาจต้องการแปลงล่ามโครงการเป็น Python 2.7.6 ถ้าคุณใช้รุ่นอื่นนอกเหนือจากนี้สิ่งนี้ใช้ได้กับฉันในการติดตั้ง Ubuntu ของ PyCharm 4.04 มืออาชีพหลังจากที่ไม่มีคำแนะนำอื่นแก้ปัญหาของฉัน


1
การสลับไปใช้ล่าม Python 2 ในพื้นที่แล้วกลับไปที่ล่าม Python 3 ระยะไกลของคุณเพื่อแก้ไขปัญหานี้ให้ฉันด้วย
James Fletcher

ใช้งานได้กับ PyCharm 5 มืออาชีพเช่นกัน ไม่มีวิธีการแก้ปัญหาอื่น ๆ ในโพสต์นี้สำหรับฉัน ฉันเดินเข้าไปในSettings -> "Project Interpreters", "More..."คลิกเกียร์แล้ว เลือกล่ามหลามเริ่มต้น ( /usr/bin/python2.7ในกรณีของฉัน) ตีและ"Ok" "Apply"จากนั้นกลับเข้าไปในห้องและเลือก virtualenv จริงที่ฉันต้องการใช้ "Ok"และ"Apply"อีกครั้งและมันได้รับการแก้ไข
Josh

ในทำนองเดียวกันFileNotFoundErrorเป็นสิ่ง Python-3 เท่านั้น หลังจากที่ฉันตั้งค่าล่ามที่ถูกต้องทั้งใน File-Settings-Project-Interpreter และ Run-Edit-Configurations หนึ่งในนั้นทำให้เกิดข้อผิดพลาดหายไป
Bob Stein

3

คุณอาจลองปิด Pycharm ลบ.ideaโฟลเดอร์ออกจากโครงการของคุณจากนั้นเริ่ม Pycharm อีกครั้งและสร้างโครงการขึ้นใหม่ สิ่งนี้ใช้ได้สำหรับฉันในขณะที่การทำให้แคชใช้ไม่ได้


2

ในที่สุดฉันก็ใช้งานได้หลังจากที่ไม่มีวิธีแก้ไขปัญหาที่เสนอให้ฉัน ฉันเล่นกับโปรเจคเฟรมเวิร์ค django และใช้ virtualenv ที่ฉันติดตั้ง ฉันสามารถแก้ไข Pycharm ได้โดยทำเครื่องหมายโฟลเดอร์รูทเป็นซอร์สรูท แต่จากนั้นเซิร์ฟเวอร์ของ django จะโยนข้อยกเว้นการแก้ไข ดังนั้นหนึ่งจะทำงานเมื่อคนอื่นจะไม่และในทางกลับกัน

ในที่สุดฉันก็ต้องทำเครื่องหมายที่โฟลเดอร์ย่อยว่าเป็นรากที่มาใน pycharm โครงสร้างของฉันเป็นแบบนี้

-playground
     -env
     -playground

โฟลเดอร์สนามเด็กเล่นที่สองนั้นคือโฟลเดอร์ที่ฉันต้องทำเครื่องหมายว่าเป็นแหล่งที่มาของรากเพื่อให้ทุกอย่างทำงานตามที่คาดไว้ ที่ไม่ได้นำเสนอปัญหาใด ๆ สำหรับสถานการณ์ของฉันดังนั้นมันจึงเป็นทางออกที่สามารถทำงานได้

แค่คิดว่าฉันจะแบ่งปันในกรณีที่คนอื่นสามารถใช้งานได้


2

มันอาจเป็นปัญหาของงูหลาม ฉันต้องเลือกสิ่งที่ถูกต้องเพื่อให้มันใช้งานได้ ป้อนคำอธิบายรูปภาพที่นี่


2

หากคุณต้องการละเว้นข้อผิดพลาด "การอ้างอิงที่ไม่ได้รับการแก้ไข" เพียงบางส่วนคุณสามารถบอกได้ว่า PyCharm อย่างชัดเจนโดยวางสิ่งนี้ไว้หน้าคลาส / วิธีการ / ฟังก์ชั่นของคุณ:

# noinspection PyUnresolvedReferences

1

ฉันปิดโครงการอื่น ๆ ทั้งหมดและเรียกใช้โครงการที่ต้องการแยกต่างหากใน Pycharm ฉันสร้าง virtualenv แยกจาก pycharm และเพิ่มโมดูลที่จำเป็นทั้งหมดในนั้นโดยใช้ pip ฉันเพิ่มสภาพแวดล้อมเสมือนนี้ในล่ามของโครงการ นี่เป็นการแก้ไขปัญหาของฉัน


1

เอาคืนฝันร้ายการผสมผสานของคำตอบ StackOVerflow ที่แตกต่างกันของฉัน:

  1. เปลี่ยนเป็นล่ามท้องถิ่น /usr/bin/pythonX.X และใช้
  2. ดูเส้นทางเหมือนคำตอบข้างต้น
  3. ค้นหาเส้นทางโครงกระดูก ของฉันคือ (/home/tim/Desktop/pycharm-community-2016.2.3/helpers/python-skeletons)
  4. เปลี่ยนกลับเป็นล่าม virt และเพิ่มเส้นทางโครงกระดูกด้วยตนเองหากไม่ปรากฏขึ้นโดยอัตโนมัติ

1

วิธีการแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน!
หากคุณกำลังใช้สภาพแวดล้อมเสมือนจริงสำหรับโครงการของคุณตรวจสอบให้แน่ใจว่าได้ใช้python.exeไฟล์ที่อยู่ในไดเรกทอรีสภาพแวดล้อมเสมือนของคุณในฐานะล่ามสำหรับโครงการ(Alt + Ctrl + Shift + S) ซึ่งจะช่วยแก้ไขปัญหาให้ฉันได้


1

ในกรณีของฉันข้อผิดพลาดการตรวจสอบปรากฏขึ้นเนื่องจากกรณีที่เฉพาะเจาะจงของรหัสหลาม ฟังก์ชั่นขั้นต่ำที่มีฟังก์ชั่น numpy สองรายการและการเข้าถึงรายการสองรายการทำให้การตรวจสอบรหัสของฉันให้ข้อผิดพลาดประเภทนี้

การลบบรรทัด 'd = 0' ในตัวอย่างต่อไปนี้จะทำให้เกิดข้อผิดพลาดในการอ้างอิงที่ไม่ได้รับการแก้ไขตามที่คาดไว้ แต่การอ่านไม่ได้ทำให้ข้อผิดพลาดหายไปสำหรับตัวตรวจสอบโค้ด ฉันยังสามารถรันโค้ดได้โดยไม่มีปัญหาหลังจากนั้น

import numpy as np
def strange(S, T, U, V):
    d = 0
    print min(np.abs(S[d]), np.abs(T[d]), U[d], V[d])

การล้างแคชและโหลดรายการเส้นทางไม่ทำงาน การแก้ไขโค้ดโดยใช้หนึ่งในตัวอย่างของแพตช์ต่อไปนี้ใช้งานได้

  • การสั่งซื้อพารามิเตอร์ 'min' อีกครั้ง: schematically SUTV แต่ไม่ใช่ STUV หรือ TSUV
  • การใช้วิธีการแทนฟังก์ชัน: S [d] .abs () แทน np.abs (S [d])
  • การใช้ฟังก์ชั่น abs () ในตัว
  • การเพิ่มตัวเลขให้กับพารามิเตอร์ของตัวเลือก: U [d] + 0

1

ไม่มีคำตอบใดที่แก้ปัญหาของฉันได้

อะไรที่ทำให้ฉันเปลี่ยนสภาพแวดล้อมและกลับไปสู่สภาพแวดล้อมเดียวกัน File->Settings->Project interpreter

ฉันกำลังใช้สภาพแวดล้อม conda


1

ทำงานให้ฉันด้วยการกระทำที่ง่ายกว่ามาก :


File > Settings > Project > Project Interpreter 
> Select "No interpreter" in the "Project interpreter" list 
> Apply > Set your python interpreter again > Click Apply

กำไร - Pycharm กำลังอัปเดตโครงกระดูกและทุกอย่างเรียบร้อยดี


0

หากคุณกำลังใช้vagrantข้อผิดพลาดอาจเกิดจากการแปลหลามผิด ในของvagrantเราที่เราใช้อยู่pyenvนั้นฉันต้องเปลี่ยนPython Interpreter pathเส้นทางจาก/usr/bin/pythonเป็น/home/vagrant/.pyenv/versions/vagrant/bin/python ป้อนคำอธิบายรูปภาพที่นี่


0

ฉันมีโครงการที่หนึ่งไฟล์ในsrc/การนำเข้าไฟล์อื่นในไดเรกทอรีเดียวกัน เพื่อให้ PyCharm จดจำฉันต้องไปที่ไฟล์> การตั้งค่า> โครงการ> โครงสร้างโครงการ> เลือกsrcโฟลเดอร์แล้วคลิก "ทำเครื่องหมายเป็น: แหล่งที่มา"

จากhttps://www.jetbrains.com/help/pycharm/configuring-folders-within-a-content-root.html

รากที่มามีไฟล์ต้นฉบับและแหล่งข้อมูลจริง PyCharm ใช้รูตซอร์สเป็นจุดเริ่มต้นสำหรับการแก้ไขการอิมพอร์ต


0

ปัญหาของฉันที่ขวด-WTFไม่ได้รับการแก้ไขโดยPyCharm ฉันได้ลองติดตั้งใหม่แล้วติดตั้งหรือทำให้แคชใช้ไม่ได้และรีสตาร์ท PyCharm แต่ก็ยังไม่ทำงาน

จากนั้นฉันก็คิดวิธีแก้ปัญหานี้และมันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน

  1. เปิดProject InterpreterโดยCtrl + Alt + S (Windows) จากนั้นคลิกติดตั้ง (+)แพ็กเกจใหม่

ป้อนคำอธิบายรูปภาพที่นี่

  1. ประเภทแพคเกจที่ไม่ได้รับการแก้ไขโดย PyCharm แล้วคลิกติดตั้งแพคเกจ จากนั้นคลิกตกลงตกลง

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณจะเห็นห้องสมุดของคุณได้รับการแก้ไขแล้ว


-1

คุณใช้ virtualenv อยู่หรือไม่?

ถ้าเป็นเช่นนั้นคุณต้องแจ้ง PyCharm สำหรับการเปลี่ยนแปลงทุกครั้งในตำแหน่งของ python.exe ที่ต้องการ (เพียงแค่. / เปิดใช้งานนั้นไม่เพียงพอสำหรับ PyCharm)

ตรวจสอบให้แน่ใจว่า Pycharm ชี้ไปที่ผู้กระทำผิดและแพ็คเกจที่ถูกต้อง: ไฟล์ -> การตั้งค่า -> โครงการ -> ล่ามโครงการ คลิกที่เฟืองและเลือก python.exe ภายใต้โฟลเดอร์ Scripts ของ virtualenv

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.