- Tìm số 0 đầu tiên trong một mảng bit
- Unix Hiển thị thông tin về các tập tin khớp với một trong hai mẫu
- Biểu thức chính quy thay thế nhiều tệp
- Ẩn lệnh từ xtrace
Tôi biết raise ... from None
并已阅读 How can I more easily suppress previous exceptions when I raise my own exception in response? .
但是,如何在不控制从 except 子句执行的代码的情况下实现相同的效果(抑制“在处理上述异常期间,发生另一个异常”消息)?我认为 sys.exc_clear()
可以用于此目的,但 Python 3 中不存在该函数。
我为什么要问这个?我有一些简单的缓存代码,看起来像(简化):
thử:
value = cache_dict[key]
except KeyError:
value = some_api.get_the_value_via_web_service_call(key)
cache_dict[key] = value
当API调用出现异常时,输出会是这样的:
Theo dõi (cuộc gọi gần đây nhất là cuộc gọi cuối cùng):
File ..., line ..., in ...
KeyError: '...'
During handling of the above exception, another exception occurred:
Theo dõi (cuộc gọi gần đây nhất là cuộc gọi cuối cùng):
File ..., line ..., in ...
some_api.TheInterestingException: ...
这是误导,因为原来的 KeyError 根本不是真正的错误。我当然可以通过将 try/except (EAFP) 更改为对 key 存在的测试 (LBYL) 来避免这种情况,但这不是很 Pythonic 并且线程友好性较低(并不是说上面是线程安全的,但那是题外话)。
期望 some_api 中的所有代码将它们的 raise X
更改为 raise X from None
是不合理的(而且它甚至在所有情况下都没有意义)。是否有一个干净的解决方案来避免错误消息中不需要的异常链?
(顺便说一下,奖励问题:我在示例中使用的缓存基本上等同于 cache_dict.setdefault(key, some_api.get_the_value_via_web_service_call(key))
,如果只有第二个参数setdefault 可以是可调用的,只有在需要设置值时才会调用。有没有更好/规范的方法来做到这一点?)
1 Câu trả lời
这里有几个选项。
首先,orlp 建议的更清晰的版本:
thử:
value = cache_dict[key]
except KeyError:
thử:
value = some_api.get_the_value(key)
ngoại trừ Ngoại lệ như e:
raise e from None
cache_dict[key] = value
对于第二个选项,我假设有一个Giá trị trả về
隐藏在你没有显示的地方:
thử:
return cache_dict[key]
except KeyError:
vượt qua
value = cache_dict[key] = some_api.get_the_value(key)
return value
第三个选项,LBYL:
if key not in cache_dict:
cache_dict[key] = some_api.get_the_value(key)
return cache_dict[key]
对于奖金问题,定义你自己的定义__missing__
的dict子类:
class MyCacheDict(dict):
def __missing__(self, key):
value = self[key] = some_api.get_the_value(key)
return value
希望这对您有所帮助!
关于python - 如何抑制显示后续异常的父异常(原因),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235516/
Hiện tại tôi đang tìm kiếm một số lời khuyên về jQuery vì tôi nghĩ mình đang làm sai mặc dù tôi vẫn nhận được kết quả như mong muốn. Tôi muốn thay đổi giá trị của đầu vào khi nó thay đổi thành giá trị của đầu vào gần nhất có lớp .milestone. Đầu vào tôi muốn thay đổi là đầu vào giữ,
Tôi đã đọc về bind, invoke, apply được gần một tuần rồi và chúng vẫn rất phức tạp đối với tôi. Tôi nghĩ jsfiddle tôi viết cần chúng. Tuy nhiên, tôi không thể làm được điều đó vì tôi vẫn còn bối rối. Tôi đã cố gắng hết sức để viết ra một số công việc phát triển mà tôi đã làm vào tuần trước khi gặp phải vấn đề này.
Tôi có một dự án tạo ra mã. Việc tạo ra sản phẩm mất rất nhiều thời gian, vì vậy tôi chia nó thành nhiều dự án, mỗi dự án tạo ra 20% tổng thể. POM gốc trở thành "POM cha" mà các POM con phụ thuộc vào, chỉ chứa một ID hiện vật duy nhất và một hoặc hai thay đổi.
Tôi đang sử dụng một phần View để tạo ra phần view phụ cha. Điều lý tưởng nhất mà tôi muốn có là một nút gửi trên View cha để lưu các giá trị của View con. Tôi có mô hình sau. lớp công khai Khóa học { công khai int
Tôi vừa mới bắt đầu học Rust và tôi đang gặp một số khó khăn trong việc hiểu cách thức hoạt động của quyền sở hữu trong trường hợp của tôi: sử dụng std::ops::IndexMut; // =========================================
Tôi mới làm quen với JavaScript và muốn biết thêm về thứ tự khởi tạo đối tượng cha/con. Cụ thể hơn, tôi muốn hiểu đoạn mã sau từ góc nhìn của trình biên dịch/trình duyệt. var parent = { con:
Tôi đang thử nghiệm Azure IaaS và gặp phải một vấn đề rất cơ bản. Tôi có một VHD cha và con mà tôi đã tải lên dưới dạng một trang blob bằng csupload và các hình ảnh và đĩa đang hiển thị trong cổng thông tin. Sau đó tôi đã cố gắng để đặt pare
Ứng dụng của tôi định kỳ yêu cầu cập nhật từ Core Data tới dịch vụ web cho các đối tượng mà tôi lưu trữ. Sau đó, tôi cần cập nhật một đối tượng mà tôi có trong ngữ cảnh chính (đối tượng được cung cấp trong AppDelegate theo mặc định). Đối tượng biên tập không phải là người dùng, vì vậy tôi cần
texT text text text text text Làm thế nào để lấy văn bản trực tiếp từ .menu? Không nên đưa trẻ em bên trong đi.
Tôi cần tác động đến các thành phần liên quan đến các thành phần khác nhưng cách tiếp cận của tôi hơi nghiệp dư! tức là đối với // mục được khớp trong đó tập lệnh được gọi từ LIÊN KẾT mà tôi sử dụng; $(this
Tôi có hai bảng: Parent-Child "Category": id name parent_id 1 Food NULL 2 Pizza 1 3 Pasta
Python 2.7.6 trên Linux. Tôi đang sử dụng lớp kiểm tra kế thừa từ lớp cha. Lớp cha chứa nhiều trường chung với nhiều lớp con và tôi cần gọi phương thức setUp của lớp cha để khởi tạo các trường này. Gọi ParentClass.setU
Tôi có một cơ sở dữ liệu xử lý hình ảnh, album và danh mục album. Một album có thể có nhiều album (album con) và chỉ có 1 cấp độ sâu. Mỗi album chỉ thuộc một thể loại album. Sau khi nghiên cứu một chút ở đây, tôi tin rằng mô hình cơ sở dữ liệu phù hợp nhất là album_ca này
Tôi có một bảng từ khóa trong đó mỗi từ khóa được gán một ID và là duy nhất. Tôi có bảng thứ hai liên kết ID của từ khóa cha với ID của từ khóa con. Một từ khóa có thể có tối đa khoảng 800 từ khóa con hoặc không có từ khóa con nào cả. đứa trẻ
Tôi thường sử dụng bộ chọn CSS này parent>child. Thiết kế của tôi trông đẹp trên Mozilla và Opera. Nhưng trong IE thì lại tệ lắm. Tôi biết rằng tính năng này không được nhận diện trong IE, nhưng có giải pháp thay thế nào trong IE không?
Tôi đã xây dựng một hệ thống với một đối tượng cha, trong đó tạo ra nhiều đối tượng con, mỗi đối tượng con đều yêu cầu một đối tượng chính để hoạt động. Bây giờ, cho đến nay tôi đã tạo shared_ptr và Child* để khi Parent và tất cả C
Tôi gặp lỗi tương thích tuần tự hóa từ hai lớp sau. Chỉ có lớp cha CommercialCustomer mới triển khai tuần tự hóa. Cách chính xác để sử dụng giao diện Serializable khi có mối quan hệ cha/con như bên dưới là gì? công cộng
Tôi đang phát triển một chương trình và tìm hiểu về quy trình cha/con. Hiện tại tiến trình con của tôi là exit(variable); và trong main() tôi có: signal(SIGCHLD, chldHandler);
Hãy xem xét hai lớp cụ thể sau: public class A { protected void foo() { System.out.println("A foo"); bar
Vì vậy, tôi đang cố gắng thiết lập mối quan hệ lớp cha/con như thế này: class ParentClass where C : ChildClass { public void AddChild(C child)
Tôi là một lập trình viên xuất sắc, rất giỏi!