Tôi đang cố gọi một hàm. Một trong các tham số là một biến với các thuộc tính (mà tôi biết vì ngoại lệ AttributeError mà tôi nhận được). Tôi không biết các thuộc tính chính xác mà biến này được cho là có, vì vậy tôi đã tự hỏi nếu có một số cách tôi có thể thấy một số chi tiết bổ sung về ngoại lệ, ví dụ, thuộc tính mà nó không thể tìm thấy. Cảm ơn.Có cách nào khác tôi có thể nhận được các chi tiết cụ thể về ngoại lệ AttributeError trong Python không?
Trả lời
AttributeError
thường xác định thuộc tính bị thiếu. ví dụ .:
class Foo:
def __init__(self):
self.a = 1
f = Foo()
print(f.a)
print(f.b)
Khi tôi chạy đó, tôi thấy:
$ python foo.py
1
Traceback (most recent call last):
File "foo.py", line 10, in <module>
print(f.b)
AttributeError: Foo instance has no attribute 'b'
Đó là khá rõ ràng. Nếu bạn không thấy điều gì đó như vậy, vui lòng đăng lỗi chính xác bạn đang xem.
EDIT
Nếu bạn cần để buộc việc in ấn của một ngoại lệ (vì lý do gì), bạn có thể làm điều này:
import traceback
try:
# call function that gets AttributeError
except AttributeError:
traceback.print_exc()
Điều đó sẽ cung cấp cho bạn các thông báo lỗi đầy đủ và traceback liên quan với ngoại lệ.
Tôi không nhận được một traceback, tôi đã chỉ nói rằng có một ngoại lệ.Tôi đã phải sử dụng thử ngoại trừ để tìm ra nó là một AttributeError. – Chuy
Vâng, câu trả lời cho câu hỏi của bạn là, "Có, có * là * một cách để cho biết thuộc tính nào bị thiếu. Nó nằm ngay trong thông điệp' AttributeError'. " Vì vậy, * bây giờ * bạn phải nhận được toàn bộ dấu vết và thông báo cho ngoại lệ. In ngoại lệ trong mệnh đề 'except' của bạn. –
Đó là những gì tôi đã làm: in "Lỗi không mong muốn:", sys.exc_info() [0] – Chuy
Thường AttributeError
mang một số thông tin về vấn đề này với nó:
#!/usr/bin/env python
class SomeClass(object):
pass
if __name__ == '__main__':
sc = SomeClass()
print sc.fail
# Traceback (most recent call last):
# File "4572362.py", line 8, in <module>
# print sc.fail
# AttributeError: 'SomeClass' object has no attribute 'fail'
Không có traceback, thật không may. – Chuy
@ user559495: "Không có traceback". Cái gì ở đó, chính xác? –
Các traceback nên cảnh báo bạn để truy cập thuộc tính nâng AttributeError
ngoại lệ:
>>> f.b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Foo instance has no attribute 'b'
Ngoài ra, chuyển đổi Exception
-str
:
>>> try:
... f.b
... except AttributeError, e:
... print e
...
Foo instance has no attribute 'b'
Nếu bạn muốn có được một danh sách các thuộc tính có sẵn trên một đối tượng, hãy thử dir()
hoặc help()
>>> dir(f)
['__doc__', '__init__', '__module__', 'a']
>>> help(str)
Help on class str in module __builtin__:
class str(basestring)
| str(object) -> string
|
| Return a nice string representation of the object.
| If the argument is a string, the return value is the same object.
|
| Method resolution order:
| str
| basestring
| object
|
| Methods defined here:
|
| __add__(...)
| x.__add__(y) <==> x+y
|
[...]
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __new__ = <built-in method __new__ of type object>
| T.__new__(S, ...) -> a new object with type S, a subtype of T
Bạn thậm chí có thể gọi help()
trên dir
(tại sao là trái như một bài tập cho người đọc):
>>> help(dir)
Help on built-in function dir in module __builtin__:
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
Else, return an alphabetized list of names comprising (some of) the attributes
of the given object, and of attributes reachable from it.
If the object supplies a method named __dir__, it will be used; otherwise
the default dir() logic is used and returns:
for a module object: the module's attributes.
for a class object: its attributes, and recursively the attributes
of its bases.
for any other object: its attributes, its class's attributes, and
recursively the attributes of its class's base classes.
Không có ... bạn luôn có thể xem mã, trừ khi bạn được cung cấp một số mô đun được biên dịch trước bởi bên thứ ba, trong trường hợp đó bạn nên yêu cầu tài liệu tốt hơn (nói một số kiểm tra đơn vị!) Từ nhà cung cấp của bạn !
- 1. Tôi có thể nhận được stacktrace ngoại lệ chi tiết trong PowerShell không?
- 2. Lấy các chi tiết ngoại lệ trong Python
- 3. Làm thế nào tôi có thể nhận được của Python unittest để không bắt ngoại lệ?
- 4. Các chi tiết cụ thể về Danh sách Thành viên
- 5. Bất cứ ai có thể giải thích chi tiết kỹ thuật ngoại lệ C++ cho tôi?
- 6. Tại sao thư được xây dựng trong ngoại lệ có xu hướng không có chi tiết cụ thể? (ví dụ: khóa từ điển)
- 7. Tôi có thể nhận ngoại lệ từ khối cuối cùng trong python không?
- 8. Bạn có viết ngoại lệ cho các vấn đề cụ thể hoặc ngoại lệ chung không?
- 9. Tôi có thể tắt ngoại lệ trong STL không?
- 10. Python: Bắt ngoại lệ cụ thể
- 11. Ở Django, làm thế nào tôi có thể nhận được thông báo của một ngoại lệ?
- 12. Làm thế nào để tìm ngoại lệ có thể được nâng lên cho một mô-đun cụ thể trong Python?
- 13. Làm cách nào để tôi có thể yêu cầu Visual Studio KHÔNG BREAK trên một ngoại lệ cụ thể?
- 14. Ai có thể cho tôi biết chi tiết về tệp hs_err_pid.log được tạo khi Tomcat gặp sự cố không?
- 15. Làm cách nào để kiểm tra xem một ngoại lệ cụ thể có bị ném không?
- 16. Applescript để khởi chạy Chrome (với chi tiết cụ thể)
- 17. Làm cách nào tôi có thể xem ngăn xếp cuộc gọi ngoại lệ trong SharePoint 2010?
- 18. Cách nhận nhật ký chi tiết trong nhật ký cho một mô-đun cụ thể
- 19. Asp.net 4.0: Cách nhận chi tiết ngoại lệ trong trang lỗi tùy chỉnh?
- 20. Có thể tạo Ngoại lệ không được kiểm tra của riêng tôi trong Java không?
- 21. Tôi có thể tìm thông tin chi tiết về chuỗi truy vấn Twitter4J ở đâu?
- 22. Python: làm thế nào tôi có thể xử lý bất kỳ ngoại lệ unhandled một cách khác?
- 23. Tôi có thể sử dụng UINavigationController làm chế độ xem chi tiết của UISplitViewController không?
- 24. Thông báo lỗi/ngoại lệ chi tiết có phải là rủi ro bảo mật không?
- 25. Làm cách nào để tôi có thể triển khai kiểu ngoại lệ của riêng mình?
- 26. Tôi có thể bắt ngoại lệ trong MVVM ở đâu?
- 27. Bắt Chi tiết ngoại lệ từ ASP.NET PageMethods Về phía khách hàng
- 28. Không thể nhận được thông tin lỗi chi tiết trong trang web ASP.NET MVC
- 29. Có thể có móc ngoại lệ toàn cầu không?
- 30. Tôi có thể tìm thêm chi tiết về mẫu Enabler được Ken Auer phổ biến ở đâu?
Cần nói mã nào gây ra lỗi thuộc tính trong truy xuất lại. Bạn cũng có thể xem nguồn của hàm bạn đang gọi. –
Tôi không có nguồn cho chức năng, đó là lý do tại sao đây là một vấn đề. – Chuy
Rất khó để gọi một hàm bằng Python mà bạn không có nguồn; nó là một phần mở rộng C? Chỉ tệp .pyc? –